如何在MS Office 2013中自动查找/replaceVBA模块中的代码?

我有大量的Excel模板包含需要更新的VBA代码。 代码模块对象的Find方法只返回true / false,而不是find的string的位置。

有什么方法可以自动查找和replace程序吗?

将此代码添加到一个新的macros启用工作簿。 设置FIND_WHATREPLACE_WITH常量,打开其他工作簿并运行代码。

原始代码来自Charles Pearson的网站

警告:只有基本的testing已经完成!

 Option Explicit Sub ReplaceTextInCodeModules() ' Must add a reference to "Microsoft Visual Basic For Applications Extensibility 5.3" ' Also must set "Trust access to the VBA project object model" ' See the url below for more info on these. ' Based on code found at: ' Source: www.cpearson.com/excel/vbe.aspx Copyright 2013, Charles H. Pearson Dim theWorkbook As Workbook Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Dim CodeMod As VBIDE.CodeModule Dim numLines As Long ' end line Dim lineNum As Long Dim thisLine As String Dim message As String Dim numFound As Long Const FIND_WHAT As String = "findthis" Const REPLACE_WITH As String = "replaced" numFound = 0 For Each theWorkbook In Application.Workbooks If theWorkbook.Name <> ThisWorkbook.Name Then If theWorkbook.HasVBProject Then Set VBProj = theWorkbook.VBProject For Each VBComp In VBProj.VBComponents 'Set VBComp = VBProj.VBComponents("Module1") Set CodeMod = VBComp.CodeModule With CodeMod numLines = .CountOfLines For lineNum = 1 To numLines thisLine = .Lines(lineNum, 1) If InStr(1, thisLine, FIND_WHAT, vbTextCompare) > 0 Then message = message & theWorkbook.Name & " | " & VBComp.Name & " | Line #" & lineNum & vbNewLine .ReplaceLine lineNum, Replace(thisLine, FIND_WHAT, REPLACE_WITH, , , vbTextCompare) numFound = numFound + 1 End If Next lineNum End With Next VBComp End If End If Next theWorkbook Debug.Print "Found: " & numFound If message <> "" Then Debug.Print message End If End Sub