1

Тема: Помогите с пакетной обработкой

Здравствуйте, необходимо Ваша помощь.

Я написал некоторое количество макросов, которые исполняют свой код в текущем документе. Так как документов у меня очень много, интересует как это все сделать пакетно.

Кто-нибудь из форумчан может скинуть кусок кода, который открывает документы в заданной папке (желательно с подпапками), вносит изменения (здесь будут мои макросы), сохраняет и закрывает документ.
То есть, по сути мне нужно понять как мои макросы использовать сразу на всех имеющихся документах.

Заранее благодарен.

2

Re: Помогите с пакетной обработкой

karminov пишет:

Кто-нибудь из форумчан может скинуть кусок кода, который открывает документы в заданной папке (желательно с подпапками), вносит изменения (здесь будут мои макросы), сохраняет и закрывает документ.

Попробуйте подход, приведенный в посте по ссылке http://wordexpert.ru/forum/viewtopic.php?id=2503. В макросе ProcessFile последовательно разместите вызовы ваших макросов.

3

Re: Помогите с пакетной обработкой

karminov пишет:

по сути мне нужно понять как мои макросы использовать сразу на всех имеющихся документах..

многое зависит от файлов
--есть ли зашита
--размер(листов)
--одинаково ли оформлены(может в одном файле выравнивание пробелами и табуляторами , в других --таблица с невидимыми границами

очень часто одинаковые на вид документы оформлены разными приемами
--------------
одно дело читать группу документов, другое --изменять их не глядючи

4

Re: Помогите с пакетной обработкой

yshindin, спасибо. Попробую разобраться.
shanemac51, по поводу защиты ничего не могу сказать, файлы открываются, редактируются, свои макросы выходит использовать на одиночных файлах. Единственный момент, который меня смущает, так это то, что в свойствах файла есть кнопка "Разблокировать" и приписка "Этот файл получен с другого компьютера....". Не знаю может ли это как-то помешать пакетной обработке.

очень часто одинаковые на вид документы оформлены разными приемами

Это не является проблемой. Если где-то что-то нужно очистить, то макрос удаляет предыдущее содержание, к примеру, колонтитул, а следующий макрос, создает тот, который нужен и так со всем макросами, то есть, не особо важна структура документа.

5

Re: Помогите с пакетной обработкой

Посмотрите макрос пакетной замены от нашего модератора Александра Витера (viter.alex)
http://wordexpert.ru/page/makros-paketn … dra-vitera

6

Re: Помогите с пакетной обработкой

yshindin пишет:

Попробуйте подход, приведенный в посте по ссылке http://wordexpert.ru/forum/viewtopic.php?id=2503. В макросе ProcessFile последовательно разместите вызовы ваших макросов.

Попробовал данный подход, как у ТС у меня ничего не срабатывает. Отдельно ProcessFile работает, а ProcessFiles ничего не делает.
К сожалению, моей компетенции не хватает, чтобы понять почему ничего не происходит. Пробовал и другие макросы по пакетной работе, там вообще, на выходе получаю битые файлы.

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

7

Re: Помогите с пакетной обработкой

karminov пишет:

Попробовал данный подход, как у ТС у меня ничего не срабатывает. Отдельно ProcessFile работает, а ProcessFiles ничего не делает.

Ну, здесь надо отлаживаться (Alt+F11). Установите точки прерывания в ProcessFile и в ваших макросах, чтобы убедиться, что через них проходит исполнение. Убедитесь, что в ProcessFiles стоит правильный доступ к папке, содержащей ваши файлы.

8

Re: Помогите с пакетной обработкой

Поставил закладки с помощью MsgBox в код ProcessFiles, дабы отловить где код не срабатывает.
В итоге, происходит только вывод MsgBox ("Do While") и MsgBox ("PRE LOOP")
Привожу код с самими закладками.

Sub ProcessFiles()
Dim mypath As String
Dim MyFile As String
Dim adoc As Document
mypath = "D:\ффф\"
MyFile = Dir(mypath)
Do While MyFile <> ""
MsgBox ("Do While")
    If MyFile Like "*.doc*" Then
        Set adoc = Nothing
        MsgBox ("IF THEN")
        On Error Resume Next
        Set adoc = Documents.Open(mypath & MyFile)
        On Error GoTo 0
        MsgBox ("IF THEN2")
        If Not (adoc Is Nothing) Then
            MsgBox ("IF THEN3")
            ProcessFile
        End If
        MsgBox ("After IF THEN3")
        adoc.Close SaveChanges:=wdSaveChanges
    End If
    MyFile = Dir
    MsgBox ("PRE LOOP")
Loop
End Sub

9

Re: Помогите с пакетной обработкой

В общем разобрался я, что причина не в коде, а в самих файлах, так как, создав новые файлы, и запустив макрос, все отработало как надо.

Думаю, что причина в этом:

Единственный момент, который меня смущает, так это то, что в свойствах файла есть кнопка "Разблокировать" и приписка "Этот файл получен с другого компьютера....".

У кого-то есть идеи как это можно исправить?

10

Re: Помогите с пакетной обработкой

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

11

Re: Помогите с пакетной обработкой

Всем спасибо, разобрался с причиной. Все было банально)) Даже как-то тупо. У меня в коде стоит doc формат, а обработать мне нужно было rtf.

Теперь все работает.

Есть еще вопрос, можно ли массово переконвертировать формат rtf в doc через макроc?