プロが教えるわが家の防犯対策術!

こんなことできるのでしょうか・・・

仕事であるマクロを作りました。最初は個人的な用途だけだったのですが、そのうち結構多くの人からも使いたいと言われ、数十人にコピーしてあげました。

ところがそのプログラムにBugが見つかりました。
修正したいのですが、他の多数の人にコピーしたものをどうやって修正するかを思案しています。

みんなに返してもらって修正版を再配布するというのが一番簡単なのですが諸事情によりちょっと無理っぽいのです。そこで、既存のマクロプログラムの中味を変更するマクロプログラムなんてものができれば、それをみんなに送って実行してもらうだけで済むなぁなんて考えています(なんかウィルスっぽいのですが)。

いかがなものでしょう??

A 回答 (3件)

>”aloha”を”Hello”に置き換える方法ということになりますが・


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

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

お礼日時:2006/04/23 07:56

例えば、モジュール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の読込については、インポートして貰うとか。
色々方法はあると思いますが、省略

この回答への補足

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

補足日時:2006/04/22 21:02
    • good
    • 0

エクセル2000までなら可能でしょうが、それ以降のバージョンではマクロでモジュールをいじれなくなっていると思います。



> それをみんなに送って実行してもらうだけで済むなぁなん・・・

送る先がわかっているなら修正版を送って上書きしてもらえばいいのでは?
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/22 21:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!