【VBA】VBAを使用して、全てのモジュールのVBAコードを置換する

VBAから
 ・全てのモジュールのVBAコードを置換
できます!

PR

前提

VBAのモジュールには以下の5種類あります。
・シートモジュール
・ブックモジュール
・フォームモジュール
・標準モジュール
・クラスモジュール

本記事では全て(=5種類)のモジュールのVBAコードを置換するサンプルプログラムを紹介します。

PR

準備

VBAを使用してVBAコードを置換するには
 ・「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェック
を入れておく必要があります。

「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェック
「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェック


以下の手順で設定画面を表示できます。

①[ファイル]→[その他]→[オプション]をクリックする。
②[トラスト センター]の「トラスト センターの設定」をクリックする。
③[マクロの設定]をクリックする。
④「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れて「OK」をクリック
⑤「OK」をクリック

PR

VBAコード(置換対象のコード)

ここでは例として、
 ・デスクトップ配下のExcelファイル「sampleMacro.xlsm」に
 ・5種類のモジュール
を作成します。
※それぞれのモジュールにサブプロシージャ「sample_00X」を作成します。

'XXXモジュール
Sub sample_00X()

    MsgBox "こんにちは!"
    
End Sub
5種類のモジュール
5種類のモジュール
シートモジュール
シートモジュール
ブックモジュール
ブックモジュール
フォームモジュール
フォームモジュール
標準モジュール
標準モジュール
クラスモジュール
クラスモジュール
PR

VBAコード(置換を実施するコード)

ここでは例として、
 ・デスクトップ配下のExcelファイル「replaceMacro.xlsm」に
 ・置換対象のコードを置換するVBAコード
を作成します。

置換を実施するVBAのコードを作成するExcelファイル
置換を実施するVBAのコードを作成するExcelファイル


置換する文字列は以下とします。

置換:こんにちは!
置換:Hello!置換しました!

Option Explicit

Sub sample()
    
    Dim exceMacrolFilePath As String
    Dim srcStr As String
    Dim destStr As String
    Dim wk As Workbook
    Dim component As Object
    Dim codeModule As Object
    Dim countOfLines As Long
    Dim i As Long
    
    'Excelファイル
    exceMacrolFilePath = "C:\Users\user\Desktop\sampleMacro.xlsm"
    '置換前の文字列
    srcStr = "こんにちは!"
    '置換後の文字列
    destStr = "Hello!置換しました!"

    'Excelファイルを開く
    '・「リンクの更新する/しない」のメッセージを非表示
    '・「読み取り専用を推奨する/しない」のメッセージを非表示
    Set wk = Workbooks.Open(fileName:=exceMacrolFilePath, UpdateLinks:=0, IgnoreReadOnlyRecommended:=True)
    
    'VBComponentsコレクションの数だけ繰り返し
    For Each component In wk.VBProject.VBComponents
        'モジュールを取得
        Set codeModule = component.codeModule
        '総行数を取得
        countOfLines = codeModule.countOfLines
        '全ての行に対して置換を実行
        For i = 1 To countOfLines
            codeModule.ReplaceLine i, Replace(codeModule.Lines(i, 1), srcStr, destStr)
        Next i
    Next
    
    'Excelファイルを保存して閉じる
    wk.Close SaveChanges:=True
    
    '後片付け
    Set codeModule = Nothing
       
End Sub

以下を指定します(15~19行目)。
※状況に応じて任意の値を指定してください。

・置換対象の「Excelファイル」
・置換前の文字列
・置換後の文字列

PR

実行結果

VBAを使用して、全て(=5種類)のモジュールのVBAコードを置換できました。

シートモジュール
シートモジュール
ブックモジュール
ブックモジュール
フォームモジュール
フォームモジュール
標準モジュール
標準モジュール
クラスモジュール
クラスモジュール
PR

参考①

上記のVBAコードは以下の記事を参考にして作成しました。

●VBAを使用して、VBAコードを置換する
※以下の記事は「指定したモジュール上の指定したサブプロシージャのみ」を置換する方法です。


●標準モジュールをエクスポートする
※以下の記事は「指定した標準モジュールのみ」をエクスポートする方法です。

PR

参考②

本記事の内容は
 ・いただいた問い合わせを参考にして作成
しました。

タイトルとURLをコピーしました