2017-04-18 47 views
1

我是VBA新手;我试图创建一个应用程序,当文本在文档中被替换时,我想放置文本并能够执行自动文本命令(F3)。替换并执行自动文本

我的问题是更换光标丢失后,我收到一条消息,指出没有有效的代码可供选择。有人可以帮助吗?

我使用下面的代码:

Sub VbaAutomation() 
    With Selection.Find 
    .ClearFormatting 
    .Text = "-A11" 
    .Replacement.ClearFormatting 
    .Replacement.Text = "" 
    .Execute Replace:=wdReplaceAll, Forward:=True, _ 
    Wrap:=wdFindContinue 
    .Execute 
    SendKeys "{F3}" 
    End With 
End Sub 

更好的解决方案可以代替替换文本和执行代码。

我想执行宏,它用自动文本代码替换任何构建块代码。例如,我的word文档有ABCD, CDEF代码,宏自动遍历构建模块代码并将其替换为精确的自动文本代码段落。

+0

我并不完全理解你的意图,但指出没有人似乎想告诉你我冒昧问题F3与你想达到的目标有什么关系。您的代码会在选定的文本中查找“-A11”,并用“”替换它。没有提及“构建模块代码”或“自动文本代码”,并且如果F3在某种程度上与这些或两者中的任何一个相关,则与其所找到的代码的其余部分无关。对于它的价值:你应该接受你的概念将允许用“”替代“-A11”。而已。 – Variatus

+0

谢谢是的F3是运行自动文本和积木。我想替换-p1,以便我可以执行积木 – Nick

+0

我们正在谈论对方。 (1)F3调用一个程序。在VBA中,如果你想调用一个程序,你需要知道它的名字。但是,我很确定F3调用的程序不是VBA宏。因此你必须使用适当的VBA语法来调用它来运行它的程序。 (2)如果您希望用构件块替换文档中的占位符,则需要指定构件块,找到占位符并进行替换。如果您可以将构建块加载到“Find”方法的'Replacement.Text'属性中,那么可以使用您的代码版本来达到此目的。 – Variatus

回答

0

这不是你如何找到并用vba替换。您不需要使用F3。你必须收集.Execute的结果,并且只要你找到一些东西就重复。

试试这个,以取代-A11每出现当前文档中:

Sub VbaAutomation() 
On Error GoTo ErrorTrap 

    Dim i As Long, crazyUpLimit As Long 
    Dim isFound As Boolean 
    isFound = True 
    crazyUpLimit = 1000 

    Do While (isFound And i < crazyUpLimit) 
     With Selection.Find 
      .ClearFormatting 
      .Text = "-A11" 
      .Replacement.ClearFormatting 
      .Replacement.Text = "" 
     ' here is the trick to go on as long as you find 
      isFound = .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue 
     End With 
     i = i + 1 

    Loop 

Exit Sub 

FilePatternError: 
    MsgBox ActiveDocument.Name & ": unknown patter of document (" & fPattern & " expected)." 

Exit Sub 
ErrorTrap: 
    Beep 
    MsgBox "FAILED" & Chr(13) & "Error number: " & err & Chr(13) & Error(err) 

End Sub 

PS:加入正规的错误处理和crazyUpLimit,避免堵塞你的电脑 - 它往往对自己有用。

分享& Enjoy!