БлогNot. "Для каждого файла *.doc из списка пытаюсь получить количество страниц..."

"Для каждого файла *.doc из списка пытаюсь получить количество страниц..."

Пишет ivan (sidorec.ivan[DOGGY]googlemail.com):

Здравствуйте! Встретился со следующей проблемой: Для каждого файла *.doc из списка пытаюсь получить количество страниц ([B]wdPropertyPages[/B]). [COLOR=red]Получаемые значения не соответствуют действительности![/COLOR]. Список файлов представляет из себя строковый массив с именами файлов (path+name). Документы открываю в цикле: открываю, считываю количество страниц, закрываю документ. Возникает одна особенность: когда код прохожу ручками: все в норме: количество страниц адекватное, как только запускаю макрос - значения другие(меньше на порядок). Предполагал, что во время работы макроса количество страниц открываемого документа не успевает обновиться. Поставил задержку сначала в 1, потом 5 и т.д. секунд. Не помогло. Попробовал пройтись по абзацам, словам и в конце концов по символам документа, надеясь, что такая работа с документом позволит правильно подсчитать количество страниц. Не вышло. Если есть идеи, прошу поделиться!

Особо не разбирался, но следующий несложный код на VBA, вставленный в документ Word, сработал, т.е. определил число страниц для каждого из кучи файлов, найденных на всём диске c:

Правда, я тут открывал-закрывал файлы и смотрел число страниц через ActiveDocument. Офис был версии XP, в младших версиях VBA вообще глючный.

Private Sub CommandButton1_Click()
 Dim mySFO As FileSearch
 Dim foundFile
 Dim s As String
 Set mySFO = Application.FileSearch
 Dim filename  As String
 Dim n As Integer
 With mySFO
  .NewSearch
  .LookIn = "c:\"
  .SearchSubFolders = True
  .filename = "*.doc"
  .FileType = msoFileTypeWordDocuments
  If .Execute() > 0 Then
   For q = 1 To .FoundFiles.Count
    Documents.Open filename:=.FoundFiles(q)
    n = ActiveDocument.ComputeStatistics(wdStatisticPages)
    s = s & ActiveDocument.Name & "=" & n & Chr(13) & Chr(10)
    ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
   Next q
  End If
 End With
 MsgBox (s)
End Sub

Для простоты сам документ с макросом находился на другом диске ( d: ) - чтоб не пытался открывать сам себя.

Также должно быть разрешено выполнение макросов (в Word XP/2003 - меню Сервис, Параметры, вкладка Безопасность, кнопка Зашита от макросов..., выбрать уровень Средняя).

09.10.2009, 23:47 [11341 просмотр]


теги: список word макрос vba

К этой статье пока нет комментариев, Ваш будет первым