回答編集履歴

1 書式の改善

hatena19

hatena19 score 7138

2017/02/16 04:49  投稿

解決済みですが、通りかかったので。
参照先のコードはVBAですが、Excel用のものですね。
Accessでも実現可能ですが、Excelとは少し異なります。。
クラスモジュール
<Class1>
**クラスモジュール
<Class1>**
```vb
Option Compare Database
Option Explicit
'イベントを持つコマンドボタン型の変数を宣言
Private WithEvents btn As Access.CommandButton
'ボタンの数字を格納する変数を宣言
Private Index As Integer
Public Property Let MyItem(ByVal c As Access.CommandButton)
   '引数のコマンドボタンを変数に格納
   Set btn = c
   'クリックイベントにイベントプロシージャを関連付け
   c.OnClick = "[EVENT PROCEDURE]"
End Property
Public Property Let MyIndex(ByVal i As Integer)
   'コマンドボタンの数字を変数に格納
   Index = i
End Property
Private Sub Btn_Click()
   MsgBox Index
End Sub
```
Excelと違って、クリックイベントにイベントプロシージャを関連付けするコードが必用になります。
フォームモジュール
<Form1>
```ここに言語を入力
**フォームモジュール
<Form1>**
```vb
Option Compare Database
Option Explicit
Private NumBtn(0 To 9) As Class1
Private Sub Form_Load()
   Dim i As Integer
   For i = 0 To 9
       Set NumBtn(i) = New Class1
       NumBtn(i).MyItem = Me("b" & i)
       NumBtn(i).MyIndex = i
   Next i
End Sub
Private Sub Form_Close()
   Erase NumBtn
End Sub
```
フォームの読み込み時(Load)イベントと閉じる時(Close)イベントを使います。
【別案】
---
今回の要件ならクラスモジュールを使わなくても、フォームモジュールのみで実現できます。
Accessでは、関数(Function)を下記のようにイベントプロパティに設定できます。
クリック時 =関数名()
これを利用します。
フォームモジュール
<Form1>
**フォームモジュール
<Form1>**
```vb
Option Compare Database
Option Explicit
Private Function Btn_Click(i As Integer)
   MsgBox i
End Function
Private Sub Form_Load()
   Dim i As Integer
   For i = 0 To 9
       Me("b" & i).OnClick = "=Btn_Click(" & i & ")"
   Next i
End Sub
```
Accessでのクラスモジュールの利用例は下記で紹介していますのでご参考に。
[ClassModule - hatena chips](http://hatenachips.blog34.fc2.com/blog-category-16.html)
また、後者のイベントプロパティに関数を設定する方法の利用例が下記にありますのでそれもご参考に。
[ボタンクリックでテキストボックスに文字入力 その1 - hatena chips](http://hatenachips.blog34.fc2.com/blog-entry-7.html)

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