|
▼桜坂 さん:
こんにちは。
>ちょっと変わった質問ですが、別のマクロが使用されているExcel内のモジュールに
>書かれている文字を変更する事は可能ですか?
>
>例:
> A・・・実行プログラム
> B・・・変換対象プログラム
>
> Aのシステムを起動し、Bのモジュール内に記述されている「A」の文字を「B」に変換す る
>
>みなさん、よろしくお願いします!!
Excel2000で確認しました。コードは、標準モジュールのコードを対象にしています。
'==============================================
Sub test()
Dim testbk As Workbook
Set testbk = Workbooks.Open(Filename:=ThisWorkbook.Path & "\vbprojecttest-sample.xls")
' マクロ変更対象ブックをオープンする
Call replace_mdl(testbk, """a""", """b""")
End Sub
'=================================================================
Sub replace_mdl(cnvbk As Workbook, str1 As String, str2 As String)
'input cnvbk : マクロ変更ブック
' str1 : 検索文字列
' str2 : 置換文字列
Dim c_cmpo As VBComponent
With cnvbk.VBProject
For Each c_cmpo In .VBComponents
With c_cmpo
If .Type = vbext_ct_StdModule And Not .CodeModule Is Nothing Then
For idx = 1 To .CodeModule.CountOfLines
wk = Replace$(.CodeModule.Lines(idx, 1), str1, str2)
.CodeModule.ReplaceLine idx, wk
Next idx
End If
End With
Next
End With
End Sub
尚、参照設定にて「Microsoft Visual Basic for Applications Extensibility X.X」
にチェックを入れてください。
ちなみにブック「vbprojecttest-sample.xls」の標準モジュールには
'=======================
Sub test()
MsgBox "a"
End Sub
を記述してテストしたら、「MsgBox "b"」になっていました。
ただし、Projectにパスワードなどが入っていたら、エラーになりますが・・。
ですが・・・・、
私は、Vbproject関連のコードをあまり書いたことがないので、練習だと思って考えましたが、コード見てるだけでも危険な匂いがしますし(XPでは、標準では使えないらしいです)、仕事では使いたくないコード内容です。
具体的な目的等を書いていただければ、もしかしたら、「別の方法がある」とか「こんな考え方すれば」という投稿があるかもしれませんよ。
|
|