Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


76159 / 76732 ←次へ | 前へ→

【4998】Re:モジュールを指定することは可能ですか?
回答  ichinose  - 03/4/16(水) 19:59 -

引用なし
パスワード
   ▼桜坂 さん:
こんにちは。
>ちょっと変わった質問ですが、別のマクロが使用されている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では、標準では使えないらしいです)、仕事では使いたくないコード内容です。

具体的な目的等を書いていただければ、もしかしたら、「別の方法がある」とか「こんな考え方すれば」という投稿があるかもしれませんよ。
0 hits

【4994】モジュールを指定することは可能ですか? 桜坂 03/4/16(水) 18:07 質問
【4998】Re:モジュールを指定することは可能ですか? ichinose 03/4/16(水) 19:59 回答
【5015】Re:モジュールを指定することは可能ですか... 桜坂 03/4/17(木) 14:12 お礼

76159 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free