大家好,并提前感谢任何回复;
这个问题是关于仅在某些条件下替换文本。
背景:我正在为一个学术机构的编辑部门制作一个宏。他们获得了大量具有相同问题的文档,并请求一些帮助以减少他们在每个文档上花费的时间。
他们想要的两件事:
我有一个RegExp可以找到并替换那些连字符,但我注意到了一个问题。我的查找/替换更改了超链接的“显示文本”。与&符号相同。坏。所以我想弄清楚的是如何排除具有Selection.Style = Word.ActiveDocument.Styles(“Hyperlink”)的文本
BTW,“不平等”的逻辑运算符是什么?我试过<>和><但我总是得到一个错误,告诉我表达是预期的。我是VBA的新手所以请原谅新手问题。这是有效的(更大的Sub的一部分):
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
P.S。我搜索了类似的帖子,发现了一个,但从未得到过回答。
答案 0 :(得分: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”)返回一个对象。因此,您需要使用“Is”和“Is Not”
希望有所帮助。
答案 1 :(得分:0)
(感谢Black Cr0w,逻辑运营商很高兴知道)
好的,这是交易...... Word Macros并不完全线性执行。
我最终想出了如何编写一个主要起作用的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
如果有人想建议一个更清洁的方法来做到这一点,我会全力以赴。
谢谢!