我试图让MSWord的vba替换一个词:"""用" a(n)"如果下一个单词是" ----"。我设法写了这个,但它似乎没有用。有什么想法吗? (我也需要对单词" a"同样的条件做同样的事情,但是还没有完成第一个,所以..) 顺便说一句,我没有设定范围,我需要扫描所有文件..
Sub Makro1()
With Selection
Set Rng = .Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "an"
.Forward = True
.Wrap = wdFindStop
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute
End With
Do While .Find.Found
If Selection.Next(Unit:=wdWord, Count:=1) = "---- " Then
.Find.Replacement.Text = "a(n)"
End If
.Find.Execute
Loop
End With
End Sub
答案 0 :(得分:2)
你不需要一个宏;它可以通过通配符查找/替换完成,其中:
Find = [an] {1,2}([_] {1,}}
替换= a(n)\ 1
当然,也可以使用通配符查找/替换宏来完成:
Sub Demo()
With ActiveDocument.Range.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[an]{1,2}( [_]{1,})"
.Replacement.Text = "a(n)\1"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
End Sub
答案 1 :(得分:1)
请尝试以下代码。它需要稍微不同的方法,因为它寻找“----”而不是“a”或“an”。
.Find.Text = "---- "
为了寻找另一个标记,例如,由12个下划线组成的字符串,修改行.Find.Text = "____________"
变为
.Find.MatchWildcards = True
.Find.Text = "______*"
如果你不能确定下面会有多少下划线会考虑下面的代码片段,它会发现六个下划线后面跟着任何其他文本,包括但不限于另外6或4个下划线。
var isIE = /*@cc_on!@*/false || !!document.documentMode;
var isMozilla = typeof InstallTrigger !== 'undefined';
var isChrome = !!window.chrome && !!window.chrome.webstore;
if(isIE) {
element.style.minHeight= "calc(100% - 291px)";
}
if(isMozilla) {
element.style.minHeight= "calc(100% - 291px)";
}
if(isChrome) {
element.style.minHeight= "-webkit-calc(100% - 291px)";
}