В общем задача такая: нужно зайти по очереди во все файлы rtf данной папки, и дописать туда нужные колонтитулы.
Что я сам нарыл:
1. Задача по обходу списка файлов решена. Вот код.
- Код: Выделить всё
Dim Curr As String ' будет тут имя файла
Curr = Dir(ActiveDocument.Path & "\\" & "*.rtf") ' инициализируем поиск по данной директории файлов по маске *.rtf
Do Until Curr = ""
' выполняем нужный код с файлом.
Curr = Dir ' продолжаем поиск таким образом (получаем следующий элемент)
Loop ' окончание цикла.
2. Задача по "внедрению" нужных колонтитулов тоже решена в конкретном документе.
- Код: Выделить всё
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader ' тут мы переходим в верхний колонтитул.
Selection.HeaderFooter.Range.Select ' как я понимаю выделяем рейндж.
Selection.HeaderFooter.Shapes.AddTextbox(msoTextOrientationUpward, _
10, 250, 30, 120).Select ' добавляем туда квадратик
Selection.Text = "Приложение А" ' изменяем текст внутри квадратика
Selection.HeaderFooter.Shapes(1).Line.Transparency = 1 ' делаем рамки квадратика прозрачными
With Selection.HeaderFooter.PageNumbers ' теперь подготовка для вставки нужного номера страницы
.NumberStyle = wdPageNumberStyleArabic
.HeadingLevelForChapter = 0
.IncludeChapterNumber = False
.ChapterPageSeparator = wdSeparatorHyphen
.RestartNumberingAtSection = True
.StartingNumber = 15 ' начинаем нумеровать с 15 страницы к примеру
.Add wdAlignPageNumberLeft, FirstPage:=True
End With
Selection.HeaderFooter.Shapes.AddTextbox(msoTextOrientationUpward, _
10, 10, 35, 45).Select ' вставляем еще один квадратик ( с номером страницы будет)
With Selection
.Collapse Direction:=wdCollapseStart
.Fields.Add Range:=Selection.Range, Type:=wdFieldPage
End With ' эти 4 строчки колдуют вставку номера страницы.
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument ' выходим из колонтитула.
3. Теперь вопросы.
Как мне вставить программно не номер страницы Type:=wdFieldPage таким образом, а скажем номер страницы + 5 ? Вот в ворде просто можно нажать Альт+F9 и появится волшебная фигурная скобка, в которой можно
написать выражение вида PAGE+5 и будет счастье. А тут же я даже формулу не пишу просто пишу Type:=wdFieldPage. Это первый вопрос.
Второй вопрос - код, написанный в п.2 работает, если зайти в документ и запустить макрос. А как программно открыть документ на редактирование, выполнить макрос и закрыть сохранив результат? (обработать фактически документ
rft или word).
Я пробовал так
- Код: Выделить всё
Dim doc As Document
Set doc = .Documents.Open(полный путь к файлу)
doc.Activate
Путь правильный, в doc после опена хранятся данные итд. Но когда я дописываю к коду в пункте 2 doc. (например первая строчка начинается не ActiveWindow... а doc.ActiveWindow...)
то макрос по прежднему выполянется не в открытом rft файла а в том документе, в котором он написан. Как бы сделать его "активным".
И последний вопрос - пока к нему еще не подходил, может тут и все просто но вдруг кто с размаху скажет - как потом измененный документ сохранить, чтобы ворд не домагался - сохранить да нет а молча сохранил.
С уважением, Андрей. Надеюсь на Вашу помощь, и уверен что мои "раскопки" по коду кому-то еще пригодятся в будущем.
[Viper] :: Пользуйся тэгами CODE