簡體   English   中英

如何在 MS Office 2013 的 VBA 模塊中自動查找/替換代碼?

[英]How to automate find/replace code in VBA modules in MS Office 2013?

我有大量的 Excel 模板,其中包含需要更新的 VBA 代碼。 代碼模塊 object 的 Find 方法只返回真/假,而不是找到的字符串的位置。

有沒有辦法自動化查找和替換過程?

將此代碼添加到啟用宏的新工作簿。 設置FIND_WHATREPLACE_WITH常量,打開其他工作簿並運行代碼。

原始代碼來自Charles Pearson 的網站

警告:僅進行了基本測試!

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

我剛剛嘗試了這個宏,它對於 Excel 2019 非常有效。但是您需要打開工作簿才能在它們上運行它。 當您有 15 個文件時...沒關系...我有 600 多個文件要修改...而我只能按 15 個文件進行修改...如果您知道如何在不打開它們的情況下進行操作。 600 個文件在同一個文件夾中。 非常感謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM