Excel VBA質問箱 IV

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

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


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

【47802】マクロでマクロを挿入 もとあし 07/3/22(木) 17:15 質問[未読]
【47805】Re:マクロでマクロを挿入 Kein 07/3/22(木) 17:30 発言[未読]
【47830】Re:マクロでマクロを挿入 もとあし 07/3/23(金) 11:15 お礼[未読]

【47802】マクロでマクロを挿入
質問  もとあし  - 07/3/22(木) 17:15 -

引用なし
パスワード
   こんにちは。いつもお世話になっています。

Sub Mcr_Ins()
Dim MCode As String
MCode = ***ここにコード記述***
Application.ScreenUpdating = False
ActiveWorkbook.VBProject.VBComponents.Add vbext_ct_StdModule
Application.VBE.CodePanes(1).CodeModule.AddFromString MCode
Application.ScreenUpdating = True
End Sub

上記コードにて他のブックにマクロを挿入しています。
一連のマクロに上記が含まれており、ブックによっては2度以上マクロを実行することがあります。
ただし、その場合、新規モジュールに同様のマクロが作成されつづけてしまいます。
一度作成されたら、この処理はスキップするにはどうすればいいか教えてください。
ただ、ブックにすでに上記で挿入した以外のマクロが入っている可能性もあります。

よろしくお願いします。

【47805】Re:マクロでマクロを挿入
発言  Kein  - 07/3/22(木) 17:30 -

引用なし
パスワード
   CodeModuleオブジェクトの Findメソッド のヘルプを調べて下さい。
それによって、コード内の文字列を検索することが出来るので、
作成済みかどうかが分かるはずです。

【47830】Re:マクロでマクロを挿入
お礼  もとあし  - 07/3/23(金) 11:15 -

引用なし
パスワード
   Kein さん、こんにちは。
いつもありがとうございます。

>CodeModuleオブジェクトの Findメソッド のヘルプを調べて下さい。
使用例が難しく、ヘルプで色々調べたのですがやはり難しく、
結局、以前のKeinさんの過去ログ:46335も参考にさせていただきました。
次のようにしたところ上手くいきました。

>Sub Mcr_Ins()
>Dim MCode As String
Dim intKazu As integer
Dim i As integer
>MCode = ***ここにコード記述***
>Application.ScreenUpdating = False
intKazu = ActiveWorkbook.VBProject.VBComponents.Count
If intKazu = 0 Then GoTo IRERU
For i = 1 To intKazu
  If ActiveWorkbook.VBProject.VBComponents(i).CodeModule.Find("****", 1, 1, -1, -1, True) = True Then GoTo OWARI
  Next i
IRERU:
>ActiveWorkbook.VBProject.VBComponents.Add vbext_ct_StdModule
>Application.VBE.CodePanes(1).CodeModule.AddFromString MCode
OWARI:
>Application.ScreenUpdating = True
>End Sub

ありがとうございました!

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