单词vba条件查找和替换

时间:2018-01-10 01:41:21

标签: ms-word word-vba

我试图让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

2 个答案:

答案 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)";
}