Необходимо программно обработать группу rft файлов

Программирование на Visual Basic for Applications
AndrewAtLipetsk
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 13.05.2014 (Вт) 15:13

Необходимо программно обработать группу rft файлов

Сообщение AndrewAtLipetsk » 14.05.2014 (Ср) 15:01

Добрый день!
В общем задача такая: нужно зайти по очереди во все файлы 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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14100
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Необходимо программно обработать группу rft файлов

Сообщение alibek » 20.05.2014 (Вт) 8:30

1. Забудь про Active* и Selection. Используй методы Document (например Sections(i).Headers для получения ссылки на колонтитул, Range вместо Selection и т.п.).
2. У объекта Field есть свойство Code. Используй его.
3. Save сохраняет без запросов. SaveAs сохраняет под другим именем.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 1

    TopList