2017-04-18 81 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!