質問: ### 前提・実現したいこと 稼働中のマクロブックに対してモジュールの入れ替えを行いたい。 上記の機能を有するマクロを作成しているのですが、 シートに書かれたソース以外ではファイルを指定して ImportFileをすることで実現できそうなのですが、 シートに書かれたソースを書き換える方法がわからずに困っています。 ### 該当のソースコード シート以外は以下のソースで実現しようとしています。 ``` Dim wkbTarget As WorkBook Dim objFile As File wkbTarget.VBProject.VBComponents.Import objFile.Path ``` ### 補足情報(FW/ツールのバージョンなど) 使用しているExcelはExcel2010(SP1)です。
回答: シートのソースコードはファイルから直接読み込めないようなので、 コードモジュールを使って削除や追加するしかないと思います。 以下サンプルです。 このサンプルでは、同じWorkBookのSRCシートからDSTシートへソースを コピーしますが、AddFromStringの引き数がソースそのものですので、 ここにたとえばファイルから取り出した文字列を入れるようにすれば ご希望の動作になるかと思います。 ``` Private Sub CommandButton1_Click() Dim dstName As String: dstName = "DST" ' コピー先のシート名 Dim srcName As String: srcName = "SRC" ' コピー元のシート名 Dim WB As Workbook: Set WB = ThisWorkbook Dim cmps As Object: Set cmps = WB.VBProject.VBComponents ' コンポーネント Dim dstMod As Object: Set dstMod = cmps(WB.Sheets(dstName).CodeName).CodeModule ' コピー先コードモジュール Dim srcMod As Object: Set srcMod = cmps(WB.Sheets(srcName).CodeName).CodeModule ' コピー元コードモジュール Call dstMod.DeleteLines(1, dstMod.countOfLines) ' コピー先を全削除 Call dstMod.AddFromString(srcMod.Lines(1, srcMod.countOfLines)) ' コピー元の長さぶんだけコピー Set dstMod = Nothing Set srcMod = Nothing Set cmps = Nothing Set WB = Nothing End Subコード ```