• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロプログラムを修正するマクロ)

マクロプログラム修正の方法を考える

このQ&Aのポイント
  • マクロプログラムの修正を考える際、個人的な用途だけでなく多くの人に使われることも視野に入れる必要がある。
  • 既存のマクロプログラムの中身を変更するマクロを作成し、それを送ってもらうことで修正版の再配布が可能になる。
  • ただし、マクロプログラムの中身を変更する方法はウィルスのように見えるため、使用には注意が必要である。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>”aloha”を”Hello”に置き換える方法ということになりますが・ 例えば、 ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.ReplaceLine 3, "MsgBox ""HELLO""" '行置換 のようにして、指定した行を置き換えることができます。 上記では、直接置き換える文字列を指定していますが、 コメントアウトしてあるように、Lines を使って指定した行のデータをString として読み込むことができますから、 それをReplace 関数を使って置き換えてから行全体を置き換えるというのもできると思います。

tarobei
質問者

お礼

アドバイス頂いた内容を元に何とかなりそうな感じです。ありがとうございました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

例えば、モジュール1の2行目から3行に修正したい関数があるとします。 例 Public Sub func() MsgBox "aloha" End Sub それをモジュール2から Public Sub Func() MsgBox "Hello" End Sub に置き換えたいとします。 Public Sub sample() Dim src As String src = "Public Sub Func()" & vbCrLf & "MsgBox ""Hello""" & vbCrLf & "End Sub" '元の関数がちゃんとアクセスできているかテストして下さい。 'Debug.Print ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(2, 3) '元のソースが表示される ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.DeleteLines 2, 3 '削除 ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.InsertLines 2, src '挿入 End Sub ただし、 ツール~マクロ~セキュリティ  信頼の置ける発行元~Visual Basic プロジェクトへのアクセスを信頼する に"チェックがついていないと実行できません。" モジュール2の読込については、インポートして貰うとか。 色々方法はあると思いますが、省略

tarobei
質問者

補足

ありがとうございます。非常にいい感じなのですが、もし可能なら置換の方法を教えてください。 上記例で言えば、”aloha”を”Hello”に置き換える方法ということになりますが・・・。あとこれさえできればばっちりなのです!何卒!

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

エクセル2000までなら可能でしょうが、それ以降のバージョンではマクロでモジュールをいじれなくなっていると思います。 > それをみんなに送って実行してもらうだけで済むなぁなん・・・ 送る先がわかっているなら修正版を送って上書きしてもらえばいいのでは?

tarobei
質問者

お礼

早速のご回答ありがとうございます。 コピーしてあげた人々は、失礼ながら実はかなりPC音痴なご高齢の方が多いため、なるべくなら「ボタンひとつ」ですませたいということです。言葉足らずでした。申し訳ありません。 ありがとうございました。

関連するQ&A