Функция предназначена для вывода информации (статистики) по всем листам документа Word.
В качестве параметра, функция получает ссылку на открытый документ Word.
Результат работы функции представлен на скриншоте.
Код функции WordDocumentProperties:
Function DocumentProperties(ByRef doc As Object) As Variant On Error Resume Next: Err.Clear ' формирует статистику по документу Word ' возвращает двумерный массив из 3 столбцов, ' а строк в массиве столько, сколько страниц в документе DOC. ' 1 столбец: номер страницы + статистика (количество абзацев, слов и букв) ' 2 столбец - текст, с которого начинается страница ' 3 столбец - текст, которым заканчивается страница Dim pg As Object, oRng As Object, pos1&, pos2& pc& = doc.Range.Information(4) ReDim arr(1 To pc&, 1 To 3) For n = 1 To pc& pos1& = doc.Range.GoTo(1, 2, , n).Start ' wdGoToPage = 1, wdGoToNext = 2 If n = pc& Then pos2& = doc.Range.End Else pos2& = doc.Range.GoTo(1, 2, , n + 1).Start End If Set oRng = Nothing: Set oRng = doc.Range(pos1&, pos2& - 1) arr(n, 1) = "Страница: " & n & vbLf & _ " абзацев: " & oRng.Paragraphs.Count& & vbLf & _ " символов: " & (pos2& - pos1& - 1) txt = "": txt = Replace(oRng.Text, vbNewLine, " ") txt1$ = Left(txt, 50): sp& = 0: sp& = InStrRev(txt1, " ") If sp& > 1 Then txt1 = Left(txt1, sp& - 1) txt2$ = Right(txt, 50): sp& = 0: sp& = InStr(1, txt2, " ") If sp& > 1 Then txt2 = Mid(txt2, sp& + 1) arr(n, 2) = Trim(Application.Trim(Application.Clean(txt1))) arr(n, 3) = Trim(Application.Trim(Application.Clean(txt2))) 'Replace(txt2, Chr(13), vbLf) Next DocumentProperties = arr End Function
Пример вызова функции из другого макроса:
' загружаем данные из файла Word Set doc = Nothing Set doc = WA.Documents.Open(filename$, , True) If doc Is Nothing Then ' если документ не открылся cell.Resize(, 5).Value = Array(index&, ShortFilename$, subfolder$, DateCreated, FileSize&) cell.Offset(, 5) = "Не удалось открыть файл DOC" Else ' документ успешно открыт arr = "": arr = DocumentProperties(doc) If IsArray(arr) Then ' если удалось загрузить данные из документа Word cell.Resize(UBound(arr), 5).Value = Array(index&, ShortFilename$, subfolder$, DateCreated, FileSize&) cell.Offset(, 5).Resize(UBound(arr), 3).Value = arr ' выводим результаты на лист Else cell.Resize(, 5).Value = Array(index&, ShortFilename$, subfolder$, DateCreated, FileSize&) cell.Offset(, 5) = "Не удалось загрузить данные из файла" End If doc.Close False ' закрываем файл DOC End If
Формулировка задачи:
Здравствуйте, не могу найти функцию или что-то подобное для перебора цикла по страницам. Задание: Если в первом параграфе (абзаце) есть прописное слово, то необходимо выровнять его по центру и перейти на следующую страницу. Знает кто-нибудь?
Код к задаче: «Работа со страницами документа»
textual
For i = 2 To ActiveDocument.ComputeStatistics(wdStatisticPages) Selection.GoTo What:=wdGoToPage, Which:=2, Name:=CStr(i) Next i
Полезно ли:
9 голосов , оценка 4.444 из 5
- Remove From My Forums
-
Question
-
Hello,
I am not sure if this is the correct place to post this, but I am looking to create a macro which will grab specific page ranges and form a new document. what I would like are these specific pages to go to into a new document called newdoc.doc
65-75,143-160,235-251,254-263
I have found the following code from
http://vbcity.com/forums/t/163889.aspx but I am unsure how to adapt it to my needs. can anyone help me?Sub PageCopy() ' moves cursor to page 2 Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2 ' selects content of page 2 Selection.Extend Application.Browser.Next ' copies selected page Selection.Copy ' creates a new document and saves it Documents.Add DocumentType:=wdNewBlankDocument Selection.PasteAndFormat (wdPasteDefault) ActiveDocument.SaveAs FileName:="NewDoc.doc" ActiveWindow.Close End Sub
Thank you
Steve
-
Moved by
Friday, March 8, 2013 3:16 PM
Move to more appropriate forum
-
Moved by
Answers
-
I am fully aware of what’s in the link. I’m also fully aware that it overstates the case. In many situations, code like I posted is all that is required. A slightly more sophisticated version follows:
Sub ExtractPages()
Application.ScreenUpdating = False
Dim PgRngs As String, i As Long
Dim RngHi As Range, RngLo As Range, Rng As Range
Dim PgHi As Long, PgLo As Long
PgRngs = «65-75,143-160,235-251,254-263»
With ActiveDocument
.SaveAs2 .Path & «/newdoc», .SaveFormat
PgHi = .ComputeStatistics(wdStatisticPages) — 1
Set RngHi = .Range.Characters.Last
Set RngLo = .Range.Characters.Last
For i = UBound(Split(PgRngs, «,»)) To 0 Step -1
PgLo = Split(Split(PgRngs, «,»)(i), «-«)(1)
If PgHi > PgLo Then
Set RngHi = RngHi.GoTo(What:=wdGoToPage, Name:=PgHi + 1)
Set RngHi = RngHi.GoTo(What:=wdGoToBookmark, Name:=»page»)
Set RngLo = RngLo.GoTo(What:=wdGoToPage, Name:=PgLo + 1)
Set RngLo = RngLo.GoTo(What:=wdGoToBookmark, Name:=»page»)
Set Rng = .Range(RngLo.End, RngHi.End)
With Rng
If .Characters.First.Previous.Text = Chr(12) Then
.Text = vbNullString
Else
.Text = Chr(12)
End If
End With
End If
PgHi = Split(Split(PgRngs, «,»)(i), «-«)(0) — 1
Next
Set RngHi = RngHi.GoTo(What:=wdGoToPage, Name:=PgHi + 1)
Set RngHi = RngHi.GoTo(What:=wdGoToBookmark, Name:=»page»)
Set Rng = .Range(0, RngHi.End)
Rng.Text = vbNullString
While .Characters.Last.Previous.Text Like «[» & vbCr & Chr(12) & «]»
.Characters.Last.Previous.Text = vbNullString
Wend
.Save
End With
Application.ScreenUpdating = True
End SubThe above code ensures there is a manual page break between any deleted pages that lacked either a manual page break or a Section break to separate them. It even splits tables that span the boundary pages.
Cheers
Paul Edstein
[MS MVP — Word]-
Edited by
macropodMVP
Sunday, March 10, 2013 12:12 AM -
Marked as answer by
Max Meng
Wednesday, April 3, 2013 9:13 AM
-
Edited by
Аннотация
Данная статья содержит Microsoft Visual Basic для приложений макроса (процедура Sub), который в цикле проходит через все листы активной книги. Этот макрос также отображается имя каждого листа.
Дополнительная информация
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации и без гарантии или подразумеваемых. Это включает, но не ограничиваясь, подразумеваемые гарантии товарной пригодности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с демонстрируемым языком программирования и средствами, которые используются для создания и отладки. Сотрудники службы поддержки Майкрософт могут объяснить возможности конкретной процедуры, но не выполнять модификации примеров для обеспечения дополнительных функциональных возможностей или создания процедур для определенных требований. Пример макроса, выполните следующие действия:
-
Введите следующий код макроса в лист модуля.
Sub WorksheetLoop() Dim WS_Count As Integer Dim I As Integer ' Set WS_Count equal to the number of worksheets in the active ' workbook. WS_Count = ActiveWorkbook.Worksheets.Count ' Begin the loop. For I = 1 To WS_Count ' Insert your code here. ' The following line shows how to reference a sheet within ' the loop by displaying the worksheet name in a dialog box. MsgBox ActiveWorkbook.Worksheets(I).Name Next I End Sub
-
Чтобы запустить макрос, поместите курсор в строку, которая считывает «Sub WorksheetLoop()» и нажмите клавишу F5.
Макрос будет цикла книги и отображает окно сообщения с именем другого листа при каждом выполнении цикла. Обратите внимание, что этот макрос будет отображать только имена листов; он будет отображаться имена других типов листов в книге. Можно также использовать цикл через все листы в книге с помощью цикла «For Each».
-
Введите следующий код макроса в лист модуля.
Sub WorksheetLoop2() ' Declare Current as a worksheet object variable. Dim Current As Worksheet ' Loop through all of the worksheets in the active workbook. For Each Current In Worksheets ' Insert your code here. ' This line displays the worksheet name in a message box. MsgBox Current.Name Next End Sub
-
Чтобы запустить макрос, поместите курсор в строку, которая считывает «Sub WorksheetLoop2()» и нажмите клавишу F5.
Этот макрос работает одинаково в макрос WorksheetLoop, за исключением того, что он использует другой тип цикла для обработки все листы активной книги.
Ссылки
Дополнительные сведения о получении справки по Visual Basic для приложений обратитесь к следующей статье Microsoft Knowledge Base:
163435 VBA: программные ресурсы для Visual Basic для приложений
226118 OFF2000: программные ресурсы для Visual Basic для приложений
Нужна дополнительная помощь?
Здравствуйте Коллеги!
Казанский! Спасибо что, отозвались.
Я, не согласен с использованием цикла
For Each, данный цикл не считает объекты, он просто перебирает указанные объекты. А нам необходимо от значений полученных страниц разделов производить -1, за исключением последнего раздела. Это насколько я, понимаю возможно только при использовании Count.
В общем у меня тоже пока не получается. Но пробую использовать
For To.
Ни как не соображу как вывести переменную s.
По чему то ActiveDocument.Sections(i).Range.ComputeStatistics (wdStatisticPages) преобразует в номера разделов а, не в количество страниц. ?
Visual Basic | ||
|
С уважением, Аватар-С!
Добавлено через 20 минут
Здравствуйте Коллеги!
О ! На половину заработало, врет естественно количество страниц в последнем разделе. Одну строку кода не понимаю (строка № 11). Теперь необходимо разобраться со строкой № 11 и последним разделом (он должен определяться без -1).
Думаю необходимо использовать Select Case.
Visual Basic | ||
|
С уважением, Аватар-С!
Написал макрос который форматирует текст по заданному мной шаблону. Но форматирует он весь документ полностью, а нужно без первой и второй страницы.
-
Вопрос заданболее трёх лет назад
-
338 просмотров
1
комментарий
Решения вопроса 1
C stackoverflow
Selection.GoTo wdGoToPage, wdGoToAbsolute, 5 'your page number here
Комментировать
Пригласить эксперта
Похожие вопросы
-
Показать ещё
Загружается…
14 апр. 2023, в 20:10
1500 руб./в час
14 апр. 2023, в 19:53
3500 руб./за проект
14 апр. 2023, в 19:53
10000 руб./за проект
Минуточку внимания
четверг, 4 октября 2018 г.
Макрос для перебора всех листов в книге
Sub WorksheetLoop()
Dim WS_Count As Integer
Dim I As Integer
WS_Count = ActiveWorkbook.Worksheets.Count
For I = 1 To WS_Count
MsgBox ActiveWorkbook.Worksheets(I).Name
Next I
End Sub
Sub WorksheetLoop2()
Dim Current As Worksheet
For Each Current In Worksheets
MsgBox Current.Name
Next
End Sub
Автор:
Владимир Усольцев
на
14:56
Ярлыки:
VBA
Комментариев нет:
Отправить комментарий
Если вы хотите выбрать любые диапазоны страниц в документе Word, сколькими способами вы можете это сделать? Теперь я предлагаю вам несколько уловок для выбора диапазона страниц в Microsoft Word.
Выберите диапазон страниц, удерживая Shift в Word
Выберите диапазон страниц с помощью VBA
Выберите диапазон страниц с Kutools for Word
Выберите диапазон страниц, удерживая Shift в Word
Нажмите в начале страницы и удерживайте Shift, прокрутите до конца страницы и щелкните в конце содержимого этой страницы. Теперь страницы выбраны.
Выберите диапазон страниц с помощью VBA
1, нажмите Alt + F11 для открытия Microsoft Visual Basic для приложенийокно s;
2. Нажмите Модули от Вставить вкладку, скопируйте и вставьте следующий код VBA в Модули окно;
Код VBA: выберите диапазон страниц из документа Word:
Sub selectpages ()
Dim rgePages As Range
Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2
Set rgePages = Selection.Range
Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=6
rgePages.End = Selection.Bookmarks("Page").Range.End
rgePages.Select
End Sub
3, нажмите F5 для запуска этого кода сразу выбираются страницы со страницы 2 по страницу 6.
Внимание: Здесь вы можете изменить Количество: = 2 и Количество: = 6 чтобы удовлетворить ваши потребности. В этом коде VBA мы выбираем диапазон страниц от страницы 2 до страницы 6.
Выберите диапазон страниц с Kutools for Word
Работы С Нами Kutools for WordАвтора Выбрать страницы Утилита, вы можете быстро выбрать любые диапазоны страниц в документе. Всего один щелчок мыши поможет вам завершить выбор страницы.
1. Нажмите Кутулс > Разделы > Выбрать страницы, см. снимок экрана:
2. Во всплывающем диалоговом окне вы можете указать диапазон страниц, введя число в поле под Выберите страницы в соответствии с разделом диапазона. Или вы можете выбрать определенные страницы по своему усмотрению в Выбрать страницы в соответствии с выбором список. Смотрите скриншот:
3. Нажмите OK or Применить кнопку, чтобы выбрать желаемые страницы.
Нажмите, чтобы скачать Kutools for Word и бесплатная пробная версия прямо сейчас!
Демонстрация: выбор диапазона страниц из документа Word
Относительные статьи:
- Выбрать текущие страницы в Word
- Выбрать определенные страницы в Word
Рекомендуемые инструменты для повышения производительности Word
Kutools For Word — Более 100 расширенных функций для Word, сэкономьте 50% времени
- Сложные и повторяющиеся операции можно производить разово за секунды.
- Вставляйте сразу несколько изображений из папок в документ Word.
- Объединяйте и объединяйте несколько файлов Word из папок в одну в желаемом порядке.
- Разделите текущий документ на отдельные документы в соответствии с заголовком, разрывом раздела или другими критериями.
- Преобразование файлов между Doc и Docx, Docx и PDF, набор инструментов для общих преобразований и выбора и т. Д.
Комментарии (0)
Оценок пока нет. Оцените первым!