2013-10-07 114 views
0

大家好,並提前感謝任何答覆;有條件替換Word宏

這個問題是關於只在某些條件下取代文本。

背景:我正在研究學術機構編輯部門的宏。他們得到大量具有相同問題的文檔,並要求他們幫助縮短每個文檔的花費時間。

的東西兩個他們想:

  • 如果一個連字符是兩個數字之間,將其更改爲短破折號
  • 改變每號(&)的「和」字

我有一個RegExp,發現並替換那些連字符就好,但我注意到一個問題。我的查找/替換改變了超鏈接的「顯示文本」。與&符號相同。壞。那麼我現在想弄清楚是怎麼排除有Selection.Style = Word.ActiveDocument.Styles(「超鏈接」)

順便說一句,什麼是爲「不等於」邏輯運算符文本?我嘗試了<>和> <,但我總是得到一個錯誤,告訴我表達式是預期的。我是VBA新手,請原諒這個新手問題。

這是工作(一個更大的小組的一部分):

Selection.Find.ClearFormatting 
Selection.Find.Replacement.ClearFormatting 
With Selection.Find 
    .Text = "([0-9])-([0-9])" 
    .Replacement.Text = "\1" & Chr$(150) & "\2" 
    .Forward = True 
    .Wrap = wdFindContinue 
    .Format = False 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = True 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
End With 
Selection.Find.Execute Replace:=wdReplaceAll 

所以我可以創建一個If/Then語句來告訴它來代替只有風格是不是超鏈接?再次

感謝, Rissa

附:我搜索了類似的帖子,發現了一個,但它從來沒有回答。

回答

0

也許更安全的方式,以找出是否你的選擇是一個超鏈接是使用下面的VBA代碼:

If Selection.Hyperlinks.Count = 1 Then 
    MsgBox "The selection is a hyperlink" 
Else 
    MsgBox "The selection is not a hyperlink" 
End If 

我只是測試它快速,它完美的作品。要回答第二個問題,諸如「=」和「<>」等操作適用於基本類型,如Integer,Float,Long等。Word.ActiveDocument.Styles(「Hyperlink」)返回一個對象。因此,您需要使用「是」和「不是」

希望有幫助。

0

(感謝黑Cr0w,邏輯運算符是很好的瞭解)

OK,這裏的交易... Word的宏不完全線性執行。

我最終想出瞭如何編寫大部分工作的If/Then/Else語句。大多。它沒有真正檢查條件,直到它做了替換(wdReplaceOne)。所以它會改變超鏈接中的第一個連字符,然後去「哦,等等!這是一個超鏈接!」然後它會跳過該超鏈接中的任何後續連字符。

所以我最終將我的If/Then/Else分成兩個單獨的If/Then塊。第一個表示「繼續前進,這裏沒有任何事情要做」,第二個人說:「啊哈!這是我們需要改變的地方。「下面的代碼,雖然畏縮值得的,不正是我想要的。

Sub replaceHyphens() 
' 
' Find hyphens that occur between digits and change them to en-dash, EXCEPT in hyperlinks 
' 
Selection.Find.ClearFormatting 
Selection.Find.Replacement.ClearFormatting 
With Selection.Find 
    .Text = "([0-9])-([0-9])" 
    .Forward = True 
    .Format = True 
    .Wrap = wdFindContinue 
    .MatchCase = False 
    .MatchWholeWord = False 
    .MatchWildcards = True 
    .MatchSoundsLike = False 
    .MatchAllWordForms = False 
    .Execute 
End With 
Do While (Selection.Find.Found = True) 
    If (Selection.Style = ActiveDocument.Styles("Hyperlink")) Then 
     Selection.Move Unit:=wdSentence, Count:=1 
    End If 
    Selection.Find.Execute 
    If (Selection.Style <> ActiveDocument.Styles("Hyperlink")) Then 
     Selection.Find.Replacement.Text = "\1" & Chr$(150) & "\2" 
     Selection.Find.Execute Replace:=wdReplaceOne 
    End If 
Loop 
End Sub 

如果有人想提出一個更清潔的方式來做到這一點,我洗耳恭聽。

謝謝!