2012-11-20 25 views
8

Belirli bir metni (işaretleme kodlarıyla belirtilir) araya getiren, metni kesip yeni bir dipnot içine ekleyen bir MS Word makrosu oluşturdum ve sonra da biçimlendirme kodlarını siler. dipnot Şimdi makroda metinde daha fazla biçimlendirme kodu bulana kadar tekrarlanmasını istiyorum.
BuradaHiçbir arama sonucu bulunamadı görüntülenene kadar Microsoft Word VBA yineleniyor

Sub SearchFN() 

'find a footnote 
Selection.Find.ClearFormatting 
With Selection.Find 
    .Text = "&&FB:*&&FE" 
    .Replacement.Text = "" 
    .Forward = True 
    .Wrap = wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchKashida = False 
    .MatchDiacritics = False 
    .MatchAlefHamza = False 
    .MatchControl = False 
    .MatchByte = False 
    .MatchAllWordForms = False 
    .MatchSoundsLike = False 
    .MatchFuzzy = False 
    .MatchWildcards = True 
End With 
Selection.Find.Execute 

'cut the footnote from the text 
Selection.Cut 

'create a proper Word footnote 
With Selection 
    With .FootnoteOptions 
     .Location = wdBottomOfPage 
     .NumberingRule = wdRestartContinuous 
     .StartingNumber = 1 
     .NumberStyle = wdNoteNumberStyleArabic 
    End With 
    .Footnotes.Add Range:=Selection.Range, Reference:="" 
End With 

'now paste the text into the footnote 
Selection.Paste 

'go to the beginning of the newly created footnote 
'and find/delete the code for the start of the note (&&FB:) 
    Selection.Find.ClearFormatting 
Selection.Find.Replacement.ClearFormatting 
With Selection.Find 
    .Text = "&&FB:" 
    .Replacement.Text = "" 
    .Forward = False 
    .Wrap = wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchKashida = False 
    .MatchDiacritics = False 
    .MatchAlefHamza = False 
    .MatchControl = False 
    .MatchByte = False 
    .MatchAllWordForms = False 
    .MatchSoundsLike = False 
    .MatchFuzzy = False 
    .MatchWildcards = True 
End With 
Selection.Find.Execute 
With Selection 
    If .Find.Forward = True Then 
     .Collapse Direction:=wdCollapseStart 
    Else 
     .Collapse Direction:=wdCollapseEnd 
    End If 
    .Find.Execute Replace:=wdReplaceOne 
    If .Find.Forward = True Then 
     .Collapse Direction:=wdCollapseEnd 
    Else 
     .Collapse Direction:=wdCollapseStart 
    End If 
    .Find.Execute 
End With 

'do same for ending code (&&FE) 
With Selection.Find 
    .Text = "&&FE" 
    .Replacement.Text = "" 
    .Forward = True 
    .Wrap = wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchKashida = False 
    .MatchDiacritics = False 
    .MatchAlefHamza = False 
    .MatchControl = False 
    .MatchByte = False 
    .MatchAllWordForms = False 
    .MatchSoundsLike = False 
    .MatchFuzzy = False 
    .MatchWildcards = True 
End With 
Selection.Find.Execute 
With Selection 
    If .Find.Forward = True Then 
     .Collapse Direction:=wdCollapseStart 
    Else 
     .Collapse Direction:=wdCollapseEnd 
    End If 
    .Find.Execute Replace:=wdReplaceOne 
    If .Find.Forward = True Then 
     .Collapse Direction:=wdCollapseEnd 
    Else 
     .Collapse Direction:=wdCollapseStart 
    End If 
    .Find.Execute 
End With 

Selection.HomeKey Unit:=wdStory 
'now repeat--but how??  

End Sub 

cevap

11

İyi sorunuzun altındaki makro bu kişi o yapabilirsiniz Selection.Find.Found sonucu kullanarak tüm belge döngü.

Yaptığınız şey bir arama başlatmaktır ve bir sonuç bulursanız, yalnızca Selection.Find.Found sonucu true iken döngü içine girer. Bunları hallettikten sonra bitti. Aşağıdaki kod, sizin için iyi hile yapmalıdır.

Sub SearchFN() 
    Dim iCount As Integer 

    'Always start at the top of the document 
    Selection.HomeKey Unit:=wdStory 

    'find a footnote to kick it off 
    With Selection.Find 
     .ClearFormatting 
     .Text = "&&FB:*&&FE" 
     .Replacement.Text = "" 
     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchKashida = False 
     .MatchDiacritics = False 
     .MatchAlefHamza = False 
     .MatchControl = False 
     .MatchByte = False 
     .MatchAllWordForms = False 
     .MatchSoundsLike = False 
     .MatchFuzzy = False 
     .MatchWildcards = True 
     .Execute 
    End With 

    'If we find one then we can set off a loop to keep checking 
    'I always put a counter in to avoid endless loops for one reason or another 
    Do While Selection.Find.Found = True And iCount < 1000 
     iCount = iCount + 1 

     'Jump back to the start of the document. Since you remove the 
     'footnote place holder this won't pick up old results 
     Selection.HomeKey Unit:=wdStory 
     Selection.Find.Execute 

     'On the last loop you'll not find a result so check here 
     If Selection.Find.Found Then 

      ''================================== 
      '' Do your footnote magic here 
      ''================================== 

      'Reset the find parameters 
      With Selection.Find 
       .ClearFormatting 
       .Text = "&&FB:*&&FE" 
       .Replacement.Text = "" 
       .Forward = True 
       .Wrap = wdFindContinue 
       .Format = False 
       .MatchCase = False 
       .MatchWholeWord = False 
       .MatchKashida = False 
       .MatchDiacritics = False 
       .MatchAlefHamza = False 
       .MatchControl = False 
       .MatchByte = False 
       .MatchAllWordForms = False 
       .MatchSoundsLike = False 
       .MatchFuzzy = False 
       .MatchWildcards = True 
      End With 
     End If 
    Loop 
End Sub 
İlgili konular