44 テキストボックスのイベントプロシージャを挿入する

特定のモジュールに対してプログラムからコードを挿入するには、VBComponentの「CodeModule」オブジェクトの「InsertLines」メソッドを使います。

イベントプロシージャもふつうのコードですのでInsertLinesメソッドで挿入できますが、”対象となるコントロール名”や”イベント名”、”そのイベントに合わせた引数”を自分で組み立てて指定するという点に注意します。InsertLinesメソッドはあくまで文字列を挿入するもので、イベントプロシージャの枠を生成するものではありません(※注)。
またそのため、プロシージャの終わりを示す「End Sub」も挿入するようにします。もちろんその間に任意のコードを含めることもできます。
  • VBComponentsコレクションから特定のフォームモジュールを取り出す際は、VBEのプロジェクトエクスプローラーに表示されているモジュール名を指定します。「フォーム2」のモジュールであれば「VBComponents("Form_フォーム2")」と指定します。
  • 次のプログラムでは、モジュールの最終行の2行下に挿入しています。その際のInsertLinesメソッドへの第1引数は「.CountOfLines + 2」です。
  • 挿入するコードは複数行であるため、各行を改行コードを表す定数「vbCrLf」で繋げています。

注:VBComponentではなくAccessの「Module」オブジェクトの「CreateEventProc」メソッドを使うことで、当該イベントプロシージャの引数もいっしょに生成することができます。
プログラム

Sub SampleCode_44()
'テキストボックスのイベントプロシージャを挿入する

  Dim vbcmp As Object
  Dim intInsRow As Integer

  'フォーム2のモジュールを開く
  Set vbcmp = VBE.ActiveVBProject.VBComponents("Form_フォーム2")
  With vbcmp.CodeModule
    '現在のモジュールの最終行の2行下を挿入先とする
    intInsRow = .CountOfLines + 2
    'イベントプロシージャを挿入
    .InsertLines intInsRow, "Private Sub テキスト1_AfterUpdate()" & vbCrLf & _
                            vbCrLf & _
                            "End Sub"
  End With

End Sub

実行例
■実行前

■実行後
| Index | Prev | Next |



Copyright © T'sWare All rights reserved