search特定文本的代码,然后删除它,并用另一个词replace它

我有代码删除vba项目代码中的某个单词,并将其replace为另一个。 我似乎无法得到它的工作。 谁能告诉我我做错了什么?

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 

代码中的一个主要缺陷是,如果它成功运行,那么它也会覆盖模块中的searchstring。 为了确保不会这样做,我们将用预定义的string填充searchstring。 我正在使用#$%@填充。

这是你正在尝试?

 '~~> 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