Excel VBA質問箱 IV

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

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


13526 / 13646 ツリー ←次へ | 前へ→

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

【4994】モジュールを指定することは可能ですか?
質問  桜坂  - 03/4/16(水) 18:07 -

引用なし
パスワード
   今日は。

ちょっと変わった質問ですが、別のマクロが使用されているExcel内のモジュールに
書かれている文字を変更する事は可能ですか?

例:
 A・・・実行プログラム
 B・・・変換対象プログラム

 Aのシステムを起動し、Bのモジュール内に記述されている「A」の文字を「B」に変換す る

みなさん、よろしくお願いします!!

【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では、標準では使えないらしいです)、仕事では使いたくないコード内容です。

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

【5015】Re:モジュールを指定することは可能ですか...
お礼  桜坂  - 03/4/17(木) 14:12 -

引用なし
パスワード
   ichinoseさん 今日は。

 回答、ありがとうございました!
 ちゃんと変換できました。
 
 今回の目的ですが、今まで記述していたある文字列を別の文字列に変更する必要になった為、何か良い方法は無いかしら?という事で相談させていただきました。
 お世話になりました。

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