1

Тема: Нужно вставить в начало и в конец документа

Здравствуйте! Помогите пожалуйста с макросом.

Задача: есть более 700 документов в формате .doc
1 - нужно вычистить из них все колонтитулы.
2 - в самое начало документа и в самый конец -  добавить картинки и пару строк текста.

То есть, оформить шапку и конец документа. (Шапка и конец отличаются, это 2 картинки и 2 разных текста).

Я только начал изучать макросы и знаний не достаточно. Заранее благодарю кто откликнется!

2

Re: Нужно вставить в начало и в конец документа

Алекс51 пишет:

Задача: есть более 700 документов в формате .doc
1 - нужно вычистить из них все колонтитулы.
2 - в самое начало документа и в самый конец -  добавить картинки и пару строк текста.
То есть, оформить шапку и конец документа. (Шапка и конец отличаются, это 2 картинки и 2 разных текста).

Предлагаю такой подход: написать основную программу, где идет цикл обработки всех файлов, и подпрограмму обработки каждого файла, которая будет вызываться в цикле для обработки очередного файла.

Для добавления шапки и конца предлагаю создать два файла с нужными материалами и в подпрограмме обработке файла вставлять их содержимое, используя InsertFile, напр.:
                               Selection.InsertFile FileName:="C:\Temp\shapka.doc"

Для чистки колонтитула надо в него перейти, выделить весь текст, выполнить Delete и вернуться в основную полосу текста, напр. (приведен пример для чистки верхнего колонтитула):
                               Application.Run MacroName:="ViewHeader"
                               Selection.WholeStory
                               Selection.Delete
                               ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

3

Re: Нужно вставить в начало и в конец документа

Спасибо, что отозвались! Я тоже пришел к выводу что добавлять шапку и окончание нужно с двух дополнительных файлов, но сам написать такой макрос не могу особенно с пакетной обработкой.
Вот нашел такую заготовку:

Sub Abz111()
Set WordObj = CreateObject("Word.Application")
MyPath = "C:\Obrabotka\1\"
iFileName = Dir(MyPath)
Do While iFileName <> ""
Set WordDoc = WordObj.Documents.Open(MyPath + iFileName)
WordObj.Visible = False


WordObj.Documents(iFileName).SaveAs FileFormat:=wdFormatDocument
WordObj.Documents(iFileName).Close SaveChanges:=True
iFileName = Dir
Loop
WordObj.Quit
Set WordDoc = Nothing
Set WordObj = Nothing
End Sub

внутрь нее вставляю свой макрос, для чистки нижних колонтитулов, вот этот:

WordBasic.ViewFooterOnly
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
ActiveWindow.ActivePane.View.NextHeaderFooter
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

получается такая конструкция

Sub Abz111()
Set WordObj = CreateObject("Word.Application")
MyPath = "C:\Obrabotka\1\"
iFileName = Dir(MyPath)
Do While iFileName <> ""
Set WordDoc = WordObj.Documents.Open(MyPath + iFileName)
WordObj.Visible = False
WordBasic.ViewFooterOnly
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
ActiveWindow.ActivePane.View.NextHeaderFooter
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
WordObj.Documents(iFileName).SaveAs FileFormat:=wdFormatDocument
WordObj.Documents(iFileName).Close SaveChanges:=True
iFileName = Dir
Loop
WordObj.Quit
Set WordDoc = Nothing
Set WordObj = Nothing
End Sub

но при запуске ничего не срабатывает, пишет error и подсвечивает желтым вот эту строку:

ActiveWindow.ActivePane.View.NextHeaderFooter

Сразу прошу прощения за возможное ламерство, я только учусь.

4

Re: Нужно вставить в начало и в конец документа

Алекс51 пишет:

при запуске ничего не срабатывает, пишет error и подсвечивает желтым вот эту строку:
ActiveWindow.ActivePane.View.NextHeaderFooter.

Мне трудно судить, почему возникает у вас ошибка исполнения. Возможно, надо все операторы, обрабатывающие открытый файл, проверить: должны ли они работать как у вас написано, либо в связке с WordObj. Мне кажется, создание объекта WordObj усложняет процесс. По поводу оператора, на котором произошла ошибка: у меня на нем ошибка не происходит, но почему-то курсор не всегда возвращается в основную полосу. Поэтому этот оператор в своем примере заменил на оператор Selection.EscapeKey.

Вот что получилось (запускать на исполнение надо программу ProcessFiles):

Sub ProcessFiles()
Dim mypath As String
Dim MyFile As String
Dim adoc As Document
mypath = "C:\Temp\Files\"
MyFile = Dir(mypath)
Do While MyFile <> ""
    If MyFile Like "*.doc*" Then
        Set adoc = Nothing
        On Error Resume Next
        Set adoc = Documents.Open(mypath & MyFile)
        On Error GoTo 0
        If Not (adoc Is Nothing) Then
            ProcessFile
        End If
        adoc.Close savechanges:=wdSaveChanges
    End If
    MyFile = Dir
Loop
End Sub

Sub ProcessFile()
'Чистка верхнего колонтитула
Application.Run MacroName:="ViewHeader"
Selection.WholeStory
Selection.Delete
Selection.EscapeKey
'Чистка нижнего колонтитула
Application.Run MacroName:="ViewFooter"
Selection.WholeStory
Selection.Delete
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
Selection.EscapeKey
'Вставка шапки
Selection.HomeKey Unit:=wdStory
Selection.InsertFile FileName:="C:\Temp\Filestoadd\shapka.doc"
'Вставка концевика
Selection.EndKey Unit:=wdStory
Selection.InsertFile FileName:="C:\Temp\Filestoadd\okonchan.doc"
End Sub

5

Re: Нужно вставить в начало и в конец документа

Огромное Вам спасибо!!   Сейчас все буду запускать в работу.

6

Re: Нужно вставить в начало и в конец документа

Еще раз спасибо, но я не совсем смог применить Вашь код. Дело в том что вторая часть, вот эта:

Sub ProcessFile()
'Чистка верхнего колонтитула
Application.Run MacroName:="ViewHeader"
Selection.WholeStory
Selection.Delete
Selection.EscapeKey
'Чистка нижнего колонтитула
Application.Run MacroName:="ViewFooter"
Selection.WholeStory
Selection.Delete
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
Selection.EscapeKey
'Вставка шапки
Selection.HomeKey Unit:=wdStory
Selection.InsertFile FileName:="C:\Temp\Filestoadd\shapka.doc"
'Вставка концевика
Selection.EndKey Unit:=wdStory
Selection.InsertFile FileName:="C:\Temp\Filestoadd\okonchan.doc"
End Sub

отлично работает, но как одиночный макрос сам по себе в одном документе, а что делать с первой частью я не соображу.  С первой части вот с этой:

Sub ProcessFiles()
Dim mypath As String
Dim MyFile As String
Dim adoc As Document
mypath = "C:\Temp\Files\"
MyFile = Dir(mypath)
Do While MyFile <> ""
    If MyFile Like "*.doc*" Then
        Set adoc = Nothing
        On Error Resume Next
        Set adoc = Documents.Open(mypath & MyFile)
        On Error GoTo 0
        If Not (adoc Is Nothing) Then
            ProcessFile
        End If
        adoc.Close savechanges:=wdSaveChanges
    End If
    MyFile = Dir
Loop
End Sub

делаю отдельный макрос, запускаю его и ничего не происходит. Я так понимаю что нужно запустить как Вы написали ProcessFiles и выполняясь она сама будет запускать ProcessFile для каждого нового файла из дерриктории где храняться doc файлы. Но как вписать вторую часть внутрь первой? Куда вписывать и в каком виде не могу никак разобраться. Если Вам не трудно соедините пожалуйста их для пакетной работы. Заранее благодарю!

7

Re: Нужно вставить в начало и в конец документа

Прошу прощения! Вы все уже и так написали!
Вот же:

If Not (adoc Is Nothing) Then
ProcessFile

и есть процедура запуска второй части кода. А я по незнанию создал этот макрос под другим именем. Теперь все встало на свои места, но возникла другая проблема - почему-то все равно после запуска ничего не происходит и даже ошибки не выдает никакой. (Работаю на Word 2007, Windows XP SP3)

8

Re: Нужно вставить в начало и в конец документа

Еще несколько раз все перепроверил на втором компьютере. Макрос ProcessFiles не запускает ProcessFile. Что может быть не так?

9

Re: Нужно вставить в начало и в конец документа

Алекс51 пишет:

Еще несколько раз все перепроверил на втором компьютере. Макрос ProcessFiles не запускает ProcessFile. Что может быть не так?

Трудно судить - я этот код проверял дома на компьютере.
А файл-то открывается? Попробуйте протрассировать на отладчике.

10

Re: Нужно вставить в начало и в конец документа

Алекс51 пишет:

Еще несколько раз все перепроверил на втором компьютере. Макрос ProcessFiles не запускает ProcessFile. Что может быть не так?

На всякий случай, проверьте, установлено ли у вас в строке
                mypath = "C:\Temp\Files\"
действительное значение вашего пути к файлам :}

11

Re: Нужно вставить в начало и в конец документа

Да с путем к файлам все ок smile Я поменял его на свою директорию smile Файл не открывается вообще, то есть после нажатия ничего не происходит, по поведению компьютера вижу что он даже не начинает делать никаких процессов. Но я продолжаю эксперименты, есть кое какие подозрения, на запрет исполнения некоторых макросов. Если подтвердиться, то напишу. В любом случае еще раз большое Вам спасибо за помощь!