Проверить наличие символа в колонтитуле

Программирование на Visual Basic for Applications
Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Проверить наличие символа в колонтитуле

Сообщение Wasup! » 04.07.2007 (Ср) 11:11

Есть документ Word, состоящий из нескольких секций. В каждой секции страницы имеют колонтитулы, причем для первой и последующих страниц в секции колонтитулы различны. Нужно проверить, что в верхнем колонтитуле страницы есть определенные символы и в зависимости от этого выполнить действия.
Я сделал это следующим кодом,
Код: Выделить всё
Sub test()
Dim i
Application.ScreenUpdating = False

For i = 1 To ThisDocument.Application.Selection.Information(wdNumberOfPagesInDocument)
    ThisDocument.Application.Selection.GoTo wdGoToPage, wdGoToAbsolute, i
    ThisDocument.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    ThisDocument.Application.Selection.Expand wdStory
   if instr(selection, "MyText") > 0 then
       Debug.Print I
  end if
Next

Application.ScreenUpdating = True

End Sub

но он медленно работает, примерно 1,5 минуты на 50 страниц.
Может быть, есть более быстрые варианты.

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 04.07.2007 (Ср) 13:00

А может так:
Код: Выделить всё
Dim objSection As Section
   
For Each objSection In ThisDocument.Sections
    Debug.Print "Раздел №" & objSection.Index
    Debug.Print , "Текст верхнего колонтитула первой страницы: " & objSection.Headers(wdHeaderFooterFirstPage).Range.Text
    Debug.Print , "Текст верхнего колонтитула: " & objSection.Headers(wdHeaderFooterPrimary).Range.Text
Next

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.07.2007 (Ср) 13:02

Это у тебя список страниц. Да?

Нет.


Код: Выделить всё
  Dim s As Section, i As Long, c As Long, r As Range
 
  Const TEXT_TO_FIND As String = "My Text"
 
  For Each s In ThisDocument.Sections
    If InStr(1, s.Headers(wdHeaderFooterFirstPage).Range.Text, TEXT_TO_FIND) Then
      Debug.Print ThisDocument.Range(s.Range.Start).Information(wdActiveEndAdjustedPageNumber); " (first page)"
    End If
   
    If InStr(1, s.Headers(wdHeaderFooterPrimary).Range.Text, TEXT_TO_FIND) Then
      Set r = s.Range.Duplicate
      c = r.ComputeStatistics(wdStatisticPages)
      r.Collapse wdCollapseStart
     
      For i = 2 To c
        Debug.Print r.Information(wdActiveEndAdjustedPageNumber); " (other pages)"
        If i <> c Then Set r = r.GoToNext(wdGoToPage)
      Next
    End If
  Next
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 113

    TopList