2014-02-14 13 views
1

我有代碼來刪除vba項目代碼中的某個單詞並將其替換爲另一個單詞。我似乎無法得到它的工作。任何人都可以告訴我我做錯了什麼?在你的代碼搜索特定文本的代碼,然後刪除它,並用另一個詞替換它

Private Sub CommandButton3_Click() 

Dim myBook As Object 
Dim i As Long 
Dim j As Long 
Dim strToReplaceWith As String, strToReplace As String, Replacing As String, Replaced As    
String 

n = Range("L10").Value 
Replacing = "Data_Acq_1Gal" 
Replaced = "Data_Acq_1Gal " & "(" & n & ")" 
Set myBook = ActiveWorkbook.VBProject 
For Each myBook In Application.Workbooks 
For i = 1 To myBook.VBProject.VBComponents.Count 
For j = 1 To 34 
If InStr(1, myBook.VBProject.VBComponents(i).CodeModule.Lines(j, 1), Replacing, vbTextCompare) Then  
myBook.VBProject.VBComponents(i).CodeModule.DeleteLines j 
strToReplace = myBook.CodePanes.Item(i).CodeModule.Lines(j, 1) 
strToReplaceWith = Replace(strToReplace, Replacing, Replaced, 1, 1, vbTextCompare) 
myBook.VBProject.VBComponents(i).CodeModule.InsertLines j, strToReplaceWith 
End If 
Next j 
Next i 
Next myBook 

End Sub 
+0

'對於j = 1到34'爲什麼34? –

+0

我只想搜索一段代碼來替換我想要的代碼,因爲我知道這些項不存在於第34行。 – user3302182

回答

0

一個主要缺陷是,如果它成功運行,然後它會覆蓋你的模塊中搜索字符串爲好。爲了確保它不會這樣做,我們將用預定義的字符串填充搜索字符串。我正在使用#$%@作爲填充。

這是你正在嘗試?

'~~> We need so that the code doesn't replace the search string in itself 
Const sPad As String = "#$%@" 

Sub Sample() 
    Dim wb As Workbook 
    Dim VBProj As VBIDE.VBProject 
    Dim VBComp As VBIDE.VBComponent 
    Dim CodeMod As VBIDE.CodeModule 
    Dim WordToReplace As String, NewWord As String 
    Dim ActualSearchWord As String, NewString As String 
    Dim i As Long, j As Long 

    '~~> Change this to the relevant sheet 
    n = ThisWorkbook.Sheets("Sheet1").Range("L10").Value 

    '~~> Padding our search string 
    WordToReplace = sPad & "Data_Acq_1Gal()" & sPad 
    ActualSearchWord = Replace(WordToReplace, sPad, "") 
    NewWord = "Data_Acq_1Gal " & "(" & n & ")" 

    For Each wb In Workbooks 
     '~~> Remove the below IF/ENDIF if you want the code to replace 
     '~~> in other modules of this workbook 
     If wb.Name <> ThisWorkbook.Name Then 
      Set VBProj = wb.VBProject 

      For Each VBComp In VBProj.VBComponents 
       Set CodeMod = VBComp.CodeModule 
       With CodeMod 
        j = .CountOfLines 

        For i = 1 To j 
         If InStr(1, .Lines(i, 1), ActualSearchWord, vbTextCompare) > 0 And _ 
         InStr(1, .Lines(i, 1), WordToReplace, vbTextCompare) = 0 Then 
          NewString = Replace(_ 
               .Lines(i, 1), _ 
               ActualSearchWord, _ 
               NewWord, 1, , vbTextCompare) 
          .ReplaceLine i, NewString 
         End If 
        Next i 
       End With 
      Next VBComp 
     End If 
    Next 
End Sub 
+0

我在Dim VBProj的頂部有VBIDE.VBProject的問題。它出現錯誤用戶定義類型未定義。任何想法,我不包括? – user3302182

+0

好吧我想出了用戶定義的類型。我不得不添加擴展性參考。我遇到的一個問題是該代碼設置爲通過每個工作表項目並進行更改。我只是想讓它通過活動工作表項目。因此,如果用戶所在的工作表是工作表21,那麼它應該在工作表中搜索宏以查找違規文本。我在哪裏改變這個?到目前爲止,我感謝你的幫助。它工作非常順利! – user3302182

+0

從手機發布所以請忽略任何輸入錯誤...爲此,您必須通過單擊VBA編輯器中的工具>參考菜單來設置對「Microsoft Visual Basic for Applications Extensibility 5.3」(版本可能有所不同)的引用。 –

相關問題