VBA.Word
От: IgBoris Россия  
Дата: 18.12.03 13:09
Оценка:
Хай, народ!
Подскажите, плиз, следующее:
Имеется вордовый файл.
Как в него программно добавить колонтитул?
Необходимо проверять условия:
Если колонтитул имеется (созданный юзверем вручную), то в него следует добавлять строки программно, иначе создавать его.
Заранее благодарю...
ВОт спасибо,хорошо — положите на комод (С)
ICQ — 125974196
Re: VBA.Word
От: Xumpopena Россия scripting.fatal.ru
Дата: 18.12.03 21:50
Оценка: 16 (2)
Здравствуйте, IgBoris, Вы писали:

IB> Хай, народ!

IB>Подскажите, плиз, следующее:
IB>Имеется вордовый файл.
IB>Как в него программно добавить колонтитул?
IB>Необходимо проверять условия:
IB>Если колонтитул имеется (созданный юзверем вручную), то в него следует добавлять строки программно, иначе создавать его.
IB>Заранее благодарю...

Не так давно не помню кем давался достаточно универсальный ответ на класс подобных вопросов: запускаешь записыватель макросов, делаешь клавишами/мышой что надо, останавливаешь записыватель, ищешь в макросах только что записаный, запускаешь его на редакцию (изменение) и вперед... код анализировать.
Но не все так просто, как на самом деле. Если делать по уму.
Тут фенька в том, что, возможно, придется несколько условий проверять: дело в том, что Ворд помимо различий верхних/нижних колонтитулов различает также: колонтитул первой страницы, четных страниц и главный колонтитул. Главный выводится на нечетных страницах, на первой, если в установках страницы не выбран пункт "различать колонтитул первой страницы" и на четных, если там же не выбран пункт "различать колонтитулы четных страниц". Но это только присказка, так как КАЖДАЯ секция (или раздел) может иметь свой комплект колонтитулов: первой страницы, четных страниц, главный. А может не иметь. Но все это проверяется соответствующими переменными: см. Object Browser (клавиша F2). Там немало найдется, друг Горацио, чему поучиться.

Это примерчик того, как установить главный верхний колонтитул первой секции
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text = "Главный верхний колонтитул"


А это — схема проверки и изменения главного верхнего колонтитула первой секции
sTmp=trim(ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text)
if sTmp="" then
    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text= s & vbCrLf & "Моя новая строка."
else
    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Text= "Моя новая строка."
endif


Ну а дальше — дело техники .
Re[2]: VBA.Word
От: IgBoris Россия  
Дата: 19.12.03 07:04
Оценка:
ОГРОМНОЕ спасибо за совет, я попробую!
ВОт спасибо,хорошо — положите на комод (С)
ICQ — 125974196
Re[2]: VBA.Word
От: IgBoris Россия  
Дата: 19.12.03 09:05
Оценка:
Здравствуйте, Xumpopena,
Благодарю — все получилось!
ВОт спасибо,хорошо — положите на комод (С)
ICQ — 125974196
Re[2]: VBA.Word
От: EM Великобритания  
Дата: 19.12.03 09:12
Оценка:
Здравствуйте, Xumpopena, Вы писали:

X> Не так давно не помню кем давался достаточно универсальный ответ на класс подобных вопросов: запускаешь записыватель макросов, делаешь клавишами/мышой что надо, останавливаешь записыватель, ищешь в макросах только что записаный, запускаешь его на редакцию (изменение) и вперед... код анализировать.


Есть более универсальный совет — открываешь хелп по Office automation API и читаешь
Опыт — это такая вещь, которая появляется сразу после того, как была нужна...
Re[2]: VBA.Word
От: Xumpopena Россия scripting.fatal.ru
Дата: 19.12.03 09:14
Оценка:
Извиняюсь, условие, естественно, поменять надо на противоположное либо операторы переставить

if sTmp="<>" then
Re[3]: VBA.Word
От: Xumpopena Россия scripting.fatal.ru
Дата: 19.12.03 12:58
Оценка:
Здравствуйте, EM, Вы писали:
EM>Есть более универсальный совет — открываешь хелп по Office automation API и читаешь

Имя файла можешь дать (для Office-2000 или 97)? Или ссылку, если он не поставляется с офисом. А может, я и читал его, просто не знал что он так называется.
Re[4]: VBA.Word
От: EM Великобритания  
Дата: 19.12.03 13:19
Оценка:
Здравствуйте, Xumpopena, Вы писали:

X>Здравствуйте, EM, Вы писали:

EM>>Есть более универсальный совет — открываешь хелп по Office automation API и читаешь

X>Имя файла можешь дать (для Office-2000 или 97)? Или ссылку, если он не поставляется с офисом. А может, я и читал его, просто не знал что он так называется.


WinWord -> Редактор макросов -> F1
Опыт — это такая вещь, которая появляется сразу после того, как была нужна...
Re[5]: VBA.Word: а попробуйте-ка мой аргумент.
От: Xumpopena Россия scripting.fatal.ru
Дата: 19.12.03 16:17
Оценка:
Здравствуйте, EM, Вы писали:
EM>Есть более универсальный совет — открываешь хелп по Office automation API и читаешь
...
EM>WinWord -> Редактор макросов -> F1

Понятно.
Выдвигаю следующее соображение: если ты очень хорошо знаешь объектную модель, то — да, вопросов нет.
А попробуй-ка между делом почитать, скажем RTFM к аппарату для завинчивания крышек на бутылки с сорокоградусной, при условии, что ты сию хреновину и в глаза не видел. А вот глазом трезвым взглядом глянешь, посмотришь как и что к чему, вот тогда — стакан и HELP или man. Утрирую, не кипятись.
К чему весь сыр-бор? А к тому, что Office automation API хорош, если ты точно знаешь откуда у этого офиса ноги растут, а если представляешь смутно или отрывчато (а это у нас не редкость: много-ли насчитаешь программеров, которые с ходу и почти полностью дерево объектов того же Word-а отрисуют), тады лучше следующий метод. Записал макрос -> поглядел -> мозгами по полу раскинул -> новый макрос с другими параметрами -> опять регистрами пошуршал -> ... -> анализ корреляций (Как это я смачно завернул!) -> Office automation API. Потому как чтобы сразу хелп применить, нужно знать не только то, что ты хочешь получить, а еще и какими методами. А в контексте исходного вопроса было понятно, что чел не в курсе.
С уваженем.
Xumpopena.
Re[3]: VBA.Word
От: Xumpopena Россия scripting.fatal.ru
Дата: 19.12.03 16:45
Оценка:
if sTmp<>"" then


Что-то я сегодня глюкую безбожно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.