Мне нравится искать часть моего документа и указывать последний заголовок.Мой документ имеет следующую структуру:
Глава 1
Глава 2
2.1 Подглава 1
Table with data
2.2 подраздел 2
Table with data
2.n подраздел N
Table with data
Глава 3
Что мне нравится делать, так это найти весь красный текст в одной из таблиц и выяснить, в какой главе (второй уровень) это указано.
Я попытался определить диапазон для каждой главы второго уровня и выполнить поиск в этом диапазоне.По какой-то причине мой поиск не ограничен диапазоном, а расширяется до конца документа.Поэтому любое нахождение красного текста в более поздней главе будет ошибочно отнесено к первой подглаве.
Я также читал, что ограничение поиска диапазоном является своего рода ошибкой (не возможно?) Из-за динамического диапазона (честно говоря, я все еще не до конца понимаю).Поэтому другой подход, который я мог бы себе представить, - это поиск по всему документу и просто выяснение последнего заголовка перед поиском.Я просто не знаю, как подойти к этому.
Мне бы очень хотелось указатель.Я продолжаю читать те же сообщения на форуме по этой теме, но не могу заставить его работать по мере необходимости.
Ниже того, что у меня есть.
Проблемы:
- первый поиск проходит во всех подглавах, но заголовок все еще находится в подглаве 1
- , если в подглаве нет красного текста, сценарий разрушается (пока не совсем уверен, чтона самом деле происходит)
мой код до сих пор:
Sub find_red_text()
Dim chapter As Range
Dim heading As Range
Dim session As String
Dim counter As Integer
Selection.HomeKey Unit:=wdStory ' go to the beginning of the document!
Set heading = ActiveDocument.Range(Start:=0, End:=0)
counter = 0 ' represent level1 headings
Do ' Loop through headings
Dim current As Long
current = heading.Start
Set heading = heading.GoTo(What:=wdGoToHeading, Which:=wdGoToNext)
If heading.Start = current Then
' We haven't moved because there are no more headings
Exit Do
End If
If heading.Paragraphs(1).OutlineLevel = wdOutlineLevel1 Then
counter = counter + 1 ' count the level 1 headers
heading.Expand Unit:=wdParagraph
End If
If (heading.Paragraphs(1).OutlineLevel = wdOutlineLevel2) And (counter = 2) Then ' special attention to the sub chapter in chapter 2
heading.Expand Unit:=wdParagraph
session = heading.Text
Set chapter = heading.GoTo(What:=wdGoToBookmark, Name:="\HeadingLevel")
With chapter.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchByte = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Font.Color = wdColorRed
Do While .Execute
chapter.Select ' just for debug purpose
MsgBox (chapter.Text & " in " & heading)
Loop
End With
End If
Loop
End Sub
Кто-нибудь может помочь мне здесь?Я некоторое время смотрю на это, схожу с ума, читая одни и те же «решения», но он просто не делает то, что мне нужно ...