2017-10-12 50 views
0

,我要做到以下幾點:VBA一句話:如果然後找出並在此代碼替換

  • 如果這個詞用字母M完成了字母N替換
  • 如果單詞結尾一個字母N,替換爲字母M.
  • 我不太瞭解使用IF - Then語句。 任何幫助將不勝感激。

    Sub find_end() 
        Selection.Find.ClearFormatting 
        Selection.Find.Replacement.ClearFormatting 
        With Selection.Find 
         .Text = "[nm]>" 
         .Replacement.Text = "" 
         .Forward = True 
         .Wrap = wdFindContinue 
         .MatchWildcards = True 
         Selection.Find.Execute 
         With Selection 
         If Selection.Find.Found = n Then 
          Selection.TypeText Text:=m 
         ElseIf Selection.Find.Found = m Then 
          Selection.TypeText Text:=n 
         End If 
    End Sub 
    
+0

你的代碼需要幾個更正(缺少兩個「結束與」;引號=「m」和=「N」,等等。但是,您的代碼不環通所有出現看看以下。作爲如何查找所有匹配項的示例,如果將它更改爲「If Selection.Text =」n「」,但您的「Selection.Find.Found」返回true或false,您的if將會工作。 –

回答

0

我修改在找到的代碼:Repeating Microsoft Word VBA until no search results found ,它會旋轉直通文檔並替換最後一個字母(如果它是一個「M」或「N」)的每個單詞的。注意,如果可能會發現超過2000米或者n個,您可能需要刪除代碼中的循環檢查。

Option Explicit 

' The following code adapted from: https://stackoverflow.com/questions/13465709/repeating-microsoft-word-vba-until-no-search-results-found 
Sub SearchFN() 
    Dim iCount As Integer 
    Dim lStart As Long 
    'Always start at the top of the document 
    Selection.HomeKey Unit:=wdStory 

    'find a footnote to kick it off 
    With Selection.Find 
     .ClearFormatting 
     .Text = "[nm]>" 
     .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 

    'Jump back to the start of the document. 
    Selection.HomeKey Unit:=wdStory 

    '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 < 2000 
     iCount = iCount + 1 

     Selection.Find.Execute 

     'On the last loop you'll not find a result so check here 
     If Selection.Find.Found Then 
      ' Exit if we start back at the beginning 
      If Selection.Start < lStart Then 
       Exit Do 
      End If 

      'Reset the find parameters 
      With Selection.Find 
       .ClearFormatting 
       .Text = "[nm]>" 
       If Selection.Text = "m" Then 
        Debug.Print "found 'm' at position: " & Selection.Start 
        Selection.Text = "n" 
       ElseIf Selection.Text = "n" Then 
        Debug.Print "found 'n' at position: " & Selection.Start 
        Selection.Text = "m" 
       End If 
       lStart = Selection.Start 
'    .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 
+0

謝謝非常感謝您的幫助。 – asad41163