vba — Получить количество страниц в документе Word
спросил
Изменено 7 месяцев назад
Просмотрено 28 тысяч раз
Я вношу множество изменений в документ Word, используя автоматизацию, а затем запускаю макрос VBA, который, среди прочего, проверяет, что в документе не больше определенного количества страниц.
Я использую ActiveDocument.Information(wdNumberOfPagesInDocument)
для получения количества страниц, но этот метод возвращает неверный результат. Я думаю, это связано с тем, что Word еще не обновил нумерацию страниц документа, чтобы отразить внесенные мной изменения.
ActiveDocument.ComputeStatistics(wdStatisticPages)
также страдает от той же проблемы.
Я пытался вставить вызов ActiveDocument.
, но это не имеет значения.
Мне удалось добавить абзац в конец документа, а затем снова его удалить, но этот хак больше не работает (недавно я перешел с Word 2003 на Word 2010).
Можно ли каким-либо образом заставить Word выполнить фактически повторную анимацию и/или дождаться завершения повторной анимации?
- vba
- мс-слово
17
Я только что потратил добрых 2 часа, пытаясь решить эту проблему, и я еще не видел этот ответ ни на одном форуме, поэтому я решил поделиться им.
https://msdn.microsoft.com/en-us/vba/word-vba/articles/pages-object-word?f=255&MSPPError=-2147217396
Это дало мне мое решение в сочетании с прочесыванием статей для обнаружил, что большинство решений, на которые ссылаются люди, не поддерживаются в новейших версиях Word. Я не знаю, в какой версии он изменился, но я предполагаю, что 2013 год и новее могут использовать этот код для подсчета страниц:
ActiveDocument. ActiveWindow.Panes(1).Pages.Count.
Я полагаю, что это работает следующим образом: ActiveDocument выбирает файл, ActiveWindow подтверждает, что файл, который будет использоваться, находится в текущем окне (в случае, если файл открыт в нескольких окнах на вкладке просмотра), Panes определяет, что если есть несколько окна/разделенные панели/любая другая ерунда, которую вы хотите, чтобы «первая» была оценена, pages.count обозначает объект страницы, который будет оцениваться путем подсчета количества элементов в коллекции.
Любой, кто знает больше, может поправить меня, но это первый метод, который дал мне правильное количество страниц в любом документе, который я пробовал!
Также я извиняюсь, но я не могу понять, как отформатировать эту строку в блок кода. Если модераторы хотят отредактировать мой комментарий, будьте моим гостем.
1
Попробуйте (возможно, после ActiveDocument.Repaginate
)
ActiveDocument. BuiltinDocumentProperties(wdPropertyPages)
Это приводит к тому, что мой Word 2010 проводит полсекунды со статусом «Подсчет слов» в строке состояния, в то время как ActiveDocument.ComputeStatistics(wdStatisticPages)
немедленно возвращает результат.
Источник: https://support.microsoft.com/en-us/kb/185509
5
После внесения всех изменений можно использовать OnTime
, чтобы задать небольшую задержку перед чтением статистики страницы.
Application.OnTime Когда:=Сейчас + TimeValue("00:00:02"), _ Имя: = "Обновление статистики"
Я бы также обновил все поля до этого OnTime
оператора:
ActiveDocument.Range.Fields.Update
1
Я нашел возможное обходное решение ниже, если не реальный ответ на вопрос темы.
Вчера первая строка ComputeStatistics
ниже возвращала правильную сумму в 31 страницу, но сегодня она возвращает только 1.
Решение состоит в том, чтобы избавиться от Content
и возвращается правильное количество страниц.
Dim docНесколько как документ Установите docMultiple = ActiveDocument lPageCount = docMultiple.Content.ComputeStatistics(wdStatisticPages) ' Возвращает 1 lPageCount = docMultiple.ComputeStatistics(wdStatisticPages) ' Возвращает правильный счетчик, 31
1
Это работает каждый раз для меня. Он возвращает общее количество физических страниц в слове.
1
Я использовал это из Excel он надежно работал примерно с 20 документами ни один из них не был длиннее 20 страниц, но некоторые были довольно сложными с изображениями и разрывами страниц и т. д.
Sub GetlastPageFromInsideExcel() Установите wD = CreateObject("Word.Application") Установите myDoc = wD. Documents.Open("C:\Temp\mydocument.docx") myDoc.Characters.Last.Select 'переместить в конец документа wD.Selection.Collapse ' свернуть выделение в конце lastPage = wD.Selection.Information(wdActiveEndPageNumber) mydoc.close wd.выйти Установите wD = Ничего Конец сабвуфера
Одна из проблем, с которой я столкнулся при получении «ComputeStatistics» для возврата правильного количества страниц, заключалась в том, что я часто работаю в представлении «Web Layout» в Word. Всякий раз, когда вы запускаете Word, он возвращается к последнему использовавшемуся режиму просмотра. Если Word оставался в режиме «Веб-макета», «ComputeStatistics» возвращал количество страниц «1» для всех файлов, обработанных сценарием. Как только я специально установил вид «Макет печати», я получил правильное количество страниц.
Например:
$MSWord.activewindow.view.type = 3 # 3 — «wdPrintView», 6 — «wdWebView» $Pages = $mydoc.ComputeStatistics(2) # 2 — это 'wdStatisticPages'
Вы можете использовать Pages-Object и его свойства, такие как Count. Работает отлично 😉
Dim objPages As Pages Set objPage = ActiveDocument.ActiveWindow.Panes(1).Pages
QuantityOfPages = ActiveDocument.ActiveWindow.Panes(1).Pages.Count
1
Dim wordapp как объект Установите wordapp = CreateObject("Word.Application") Затемнить документ как объект Установите doc = wordapp.Documents.Open(oFile.Path) Dim pagesСчитать как целое pagesCount = doc.Content.Information(4) 'wdNumberOfPagesInDocument doc.Закрыть Ложь Установить документ = Ничего
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Как использовать разные верхние и нижние колонтитулы в одном документе Word
Знаете ли вы, что в документе Word можно использовать разные верхние и нижние колонтитулы? Мы покажем вам, как на Windows, Mac и в Интернете.
Верхние и нижние колонтитулы идеально подходят для размещения номеров страниц, заголовков документов и даже логотипа вашей компании. По умолчанию верхний и нижний колонтитулы на каждой странице в Microsoft Word одинаковы. Но это не обязательно.
Возможно, вы хотите, чтобы эти области в документе немного отличались. Возможно, вы захотите, чтобы номера страниц чередовались слева и справа на каждой второй странице. Или у вас может быть титульная страница для первой страницы, и вы вообще не хотите использовать верхний или нижний колонтитул.
Этот процесс одинаков в Word для Windows и Mac, но немного отличается в Word для Интернета. Итак, мы начнем с того, как настроить различные верхние и нижние колонтитулы в документе Word на рабочем столе.
Верхние и нижние колонтитулы в Word Desktop
Откройте документ Word в Windows или Mac и выполните следующие действия, чтобы назначить верхние и нижние колонтитулы.
- Дважды щелкните область верхнего или нижнего колонтитула страницы.
- В разделе «Параметры» на ленте установите флажок для Разные нечетные и четные страницы , Разные первые страницы или оба варианта.
- Вы увидите, что индикатор слева для Верхний или Нижний колонтитул изменится на Нечетный/Четный/Верхний колонтитул первой страницы или Нечетный/Четный/Нижний колонтитул первой страницы.
- Введите верхний или нижний колонтитул для этой страницы. Затем перейдите на следующую страницу и введите верхний или нижний колонтитул там.
Нажмите Закрыть верхний и нижний колонтитулы в правой части ленты или дважды щелкните текст документа, чтобы вернуться к редактированию документа.
Вы можете видеть верхние и нижние колонтитулы в документе во время работы над ним. Они просто кажутся затемненными.
Верхние и нижние колонтитулы в Word в Интернете
Войдите в свою учетную запись Microsoft в Word в Интернете и откройте документ. Затем выполните следующие действия, чтобы вставить верхние и нижние колонтитулы.
- Перейдите на вкладку Вставка и щелкните Верхний и нижний колонтитулы .
- В правой части документа щелкните стрелку раскрывающегося списка Параметры .
- Выберите, как вы хотите настроить верхние и нижние колонтитулы. Вы можете выбрать «Разные первые страницы», «Разные четные и нечетные страницы» или «Разные первые, четные и нечетные страницы».
- Затем вы увидите области верхнего и нижнего колонтитула с вкладками для первой, четной и нечетной страниц, в зависимости от выбранного выше параметра.
- Введите в верхний или нижний колонтитул то, что вы хотите для первой, четной или нечетной страницы, выберите следующую вкладку и введите то, что вы хотите для этих страниц.
Щелкните внутри серой области страницы, когда закончите и захотите продолжить работу над основной частью документа.
Просмотр верхних и нижних колонтитулов в Word Online
Вернувшись к редактированию документа, вы не увидите верхних и нижних колонтитулов.
Ваш комментарий будет первым