宜しくお願い致します。
VBAで、コードの文字の一括置き換えは出来ますが、一括追加は何らかの方法でできますか?
例)
Private Sub PI担当者ID_AfterUpdate()
If Isnull(Me.PI担当者ID) = False Then
Me.PI測定日 = Date
End If
End Sub
置換のウインドウで、「PI担当者」を「Tan承認者」に置き換えることはできますが、
「End IF」の次の行に「Msgbox "日付を代入しました。", vbokonly」を追加することはできますか?
置換のウインドウで、
「検索する文字列」に「End IF」
「置換後の文字列」に
「End IF
Msgbox "日付を代入しました。", vbokonly」(改行しています)
とは入力できないので。
標準のエディタには無い機能なので、それができるエディタを使うとか、[F3][END][CTRL+v]を繰り返すとか、それをマクロで作るとか
あとは改行の代わりに
:
を使ってマルチステートメント記述にするとかまぁ、コードの一括処理は余計なバグを生むこともありオススメしませんが
同じようなコードの置換、追加が多数必要になるということは、同じような処理が多数あるということですよね。
Private Sub PI担当者ID_AfterUpdate()
ということから推測すると、多数のコントロール(テキストボックス等)があり、そのコントロールで更新が発生したら、PI測定日を現在の日付を入力してメッセージボックスを表示させたい、
ということがご希望のことかと思えますがどうでしょうか。
こういう場合、共通の処理は一つのプロシージャにまとめておくと修正があっても一か所ですみます。
例えば下記のようなに。
さらに共通処理の部分をFunctionにしておけば、
デザインビューでこの処理を適用したいコントロールを複数選択しておいて「更新後処理」に
=Ctrl_Update()
とすれば、コントロール_AfterUpdate() のコードをコントロール数分記述する必要もなくなります。
同じような処理を複数個所に繰り返し記述するはバグの原因になりかねませんので、纏められるものはなるべつ纏めるというのがプログラミングの鉄則で。
hiroton様、hatena様
ご回答ありがとうございます。
hiroton様の「コードの一括処理は余計なバグを生む」
hatena様の「纏められるものはなるべつ纏める」
勉強させていただきました。
今回、自分で試行錯誤しながら、VBAでVBAをコントロールするコードの記述ができました。
新規フォームに「実行」ボタン、「対象文字列」テキストボックス、「置換文字列」テキストボックスを配置し、
実行ボタンをクリックすると、全モジュールに対し、対象文字列を置換文字列に置き換える処理を行います。
Min3に関しては、3つの数値の中で最小値が何かを算出する関数(ただし、0は除く)
まだ、モジュール2つに対してのみ実行しただけなので、不完全でありますので、もっとテストしてみます。
ただ、hiroton様、hatena様の助言をいただきまして、実行するかよく考えなおしてみます。
コメントアップ時にChr(13)とChr(10)でエラーが出たので、
Chr(13)→Chr13
Chr(10)→Chr10
としました。
結局、VBAコードを一括変更は怖いので、1つ1つ変更していきます。
hatena様の「処理を纏める」ことを行なっていきたいと思います。