Sub Кнопка1_Щелчок()
Dim appWD As Word.Application ' объект Word
Dim docWD As Word.Document ' документ Word
Dim rg_paths, rg_pages, rg_chars As Range ' список путей к документам, массивы Excel куда вставить статистику по страницам и знакам
Dim StatsSheet As Worksheet ' страница где находятся rg_pages и rg_chars
Dim n_paths_row, n_paths_rows, n_paths_col, pages, chars, k As Integer
Dim s_filepath As String
' Инициализируем переменные
Set appWD = New Word.Application
Set StatsSheet = Worksheets(2)
Set rg_pages = StatsSheet.Range("E2:E77")
Set rg_chars = StatsSheet.Range("F2:F77")
' Список документов д.б. выделен
If Not Selection Is Nothing Then
Set rg_paths = Selection
Else
Exit Sub
End If
' Номера строк и столбцов списка
n_paths_row = rg_paths.Row
n_paths_rows = rg_paths.Rows(rg_paths.Rows.Count).Row
n_paths_col = rg_paths.Column
k = -1
For rw = n_paths_row To n_paths_rows ' по всем строкам списка
s_filepath = ActiveSheet.Cells(rw, n_col).Text ' извлекаем путь к файлу
Set docWD = appWD.Documents.Open(s_filepath) ' открываем этот документ Word
docWD.Activate ' и активируем его
' Записываем данные статистики
pages = appWD.ActiveDocument.BuiltinDocumentProperties(wdPropertyPages)
chars = appWD.ActiveDocument.BuiltinDocumentProperties(wdPropertyCharsWSpaces)
appWD.ActiveDocument.Close True ' закрываем документ без запроса
k = k + 1
' Пишем данные в Excel
StatsSheet.Cells(2 + k, rg_pages.Column).Value = pages
StatsSheet.Cells(2 + k, rg_chars.Column).Value = chars
Next rw
' закрываем Word
appWD.Quit True
' уничтожаем обьект - документ
Set appWD = Nothing
' уничтожаем обьект - Word
Set appWD = Nothing
End Sub
Получение статистики документа Word
Код:
Компилятор VB говорит: "User-defined type not defined" и показывает на 1 строку кода (Dim appWD As Word.Application)
Что не так? Помогите ответом.
Только теперь другая маленькая проблемка. Количество страниц в документах выдает неправильно. Это связано, думаю, с тем, что между открытием документа и считывания статистики слишком мало времени и Ворд не успевает произвести разбивку страниц, следовательно возвращает неправильное количество. Как с этим бороться? Другими словами, как сделать так, чтобы Ворд "дождался" полного открытия документа и разбивки на страницы перед тем, как вывести статистику?
Можно поискать такое событие.Наверняка должно быть что-то типа DocumentComplete или вроде этого.Или,как у компонента WebBrowser,может быть свойство,возвращающее состояние загрузки
Поищу, спасибо...
Нашел. Doc.Repaginate пересчитывает кол-во страниц.