回答編集履歴

1 指摘事項の追加

thom.jp

thom.jp score 650

2016/02/03 01:04  投稿

参考にされているサイトはVB6についての記述のようですね。
AccessのフォームはMSForms.Formではなく、Access.Formとなり、VB6やExcelのフォームとは別物です。
そして、色々と試してみましたが、イベントをフックすることはできませんでした。
さて、私の結論は「できない」なのですが、一応、色々と間違ってそうなところをお伝えします。
Form_inisialyzはスペルミスかと思いますが、もともとアクセスフォームにInitializeイベントやTerminateイベントはありません。書くならLoadイベント、Unloadイベントです。
まず、AccessのコマンドボタンはMSForms.CommandButtonとは別なので、Access.CommandButtonと書く必要があります。
Terminateイベントに書いているSet NumBtn = Nothingですが、NumBtnは配列かと思いますので、個別にNothingするか「Erase NumBtn」とする必要があります。
次に、Form_inisialyzはスペルミスかと思いますが、もともとアクセスフォームにInitializeイベントやTerminateイベントはありません。書くならLoadイベント、Unloadイベントです。
それと、NumBtn(i).MyItem Controls("b" & i) はプロパティへの値セットなので、イコールで代入する必要があります。さらにオブジェクト型プロパティなので、Setが必要です。
次に、Terminateイベントに書いているSet NumBtn = Nothingですが、NumBtnは配列かと思いますので、個別にNothingするか「Erase NumBtn」とする必要があります。
最後に、NumBtn(i).MyItem Controls("b" & i) はプロパティへの値セットなので、イコールで代入する必要があります。さらにオブジェクト型プロパティなので、Setが必要です。
**Set NumBtn(i).MyItem = Controls("b" & i)**
しかし、全部直しても、やはり動作しませんでした。
**【代替案】**
次のマクロを用意して、
```VBA
Private Sub ButtonClick(ByRef Num As Integer)
   MsgBox "ボタン" & Num & "が押されました。"
End Sub
```
個別のボタンクリックマクロから呼び出します。
```VBA
Private Sub b0_Click()
   Call ButtonClick(0)
End Sub
```
個別のマクロをいちいち手で書くのが面倒なら、標準モジュールに次のコードを用意し、マクロにコードを書かせます。
```VBA
Sub PrintButtonEvents()
   For i = 0 To 9
       Debug.Print "Private Sub b" & i & "_Click()"
       Debug.Print Space(4) & "Call ButtonClick(" & i & ")"
       Debug.Print "End Sub"
   Next
End Sub
```
実行するとイミディエイトウインドウにマクロが出力されるので、それを張り付けてください。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る