概要
Accessフォームで使用可能なコントロール (CommandButton、Labelなど) で、
それぞれがどのイベントに対応しているかをまとめた。
コントロールのイベント一覧
コントロールオブジェクト | オブジェクトタイプ定数 | 番号 | AfterUpdate | AttachmentCurrent | BeforeNavigate2 | BeforeUpdate | Change | Click | DblClick | Dirty | DocumentComplete | Enter | Exit | GotFocus | KeyDown | KeyPress | KeyUp | LostFocus | MouseDown | MouseMove | MouseUp | NavigateError | ProgressChange | Updated | NotInList | Undo |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Attachment | acAttachment | 126 | ○ | ○ | - | ○ | ○ | ○ | ○ | ○ | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - |
BoundObjectFrame | acBoundObjectFrame | 108 | ○ | - | - | ○ | - | ○ | ○ | - | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | ○ | - | - |
CheckBox | acCheckBox | 106 | ○ | - | - | ○ | - | ○ | ○ | - | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - |
ComboBox | acComboBox | 111 | ○ | - | - | ○ | ○ | ○ | ○ | ○ | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | ○ | ○ |
CommandButton | acCommandButton | 104 | - | - | - | - | - | ○ | ○ | - | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - |
ActiveX | acCustomControl | 119 | - | - | - | - | - | - | - | - | - | ○ | ○ | ○ | - | - | - | ○ | - | - | - | - | - | ○ | - | - |
EmptyCell | acEmptyCell | 127 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
Image | acImage | 103 | - | - | - | - | - | ○ | ○ | - | - | - | - | - | - | - | - | - | ○ | ○ | ○ | - | - | - | - | - |
Label | acLabel | 100 | - | - | - | - | - | ○ | ○ | - | - | - | - | - | - | - | - | - | ○ | ○ | ○ | - | - | - | - | - |
Line | acLine | 102 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
ListBox | acListBox | 110 | ○ | - | - | ○ | - | ○ | ○ | - | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - |
NavigationButton | acNavigationButton | 130 | - | - | - | - | - | ○ | ○ | - | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - |
NavigationControl | acNavigationControl | 129 | ○ | - | - | ○ | ○ | ○ | ○ | ○ | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | ○ |
Unbound ObjectFrame | acObjectFrame | 114 | - | - | - | - | - | ○ | ○ | - | - | ○ | ○ | ○ | - | - | - | ○ | ○ | ○ | ○ | - | - | ○ | - | - |
OptionButton | acOptionButton | 105 | ○ | - | - | ○ | - | ○ | ○ | - | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - |
OptionGroup | acOptionGroup | 107 | ○ | - | - | ○ | - | ○ | ○ | - | - | ○ | ○ | - | - | - | - | - | ○ | ○ | ○ | - | - | - | - | - |
Page | acPage | 124 | - | - | - | - | - | ○ | ○ | - | - | - | - | - | - | - | - | - | ○ | ○ | ○ | - | - | - | - | - |
PageBreak | acPageBreak | 118 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
Rectangle | acRectangle | 101 | - | - | - | - | - | ○ | ○ | - | - | - | - | - | - | - | - | - | ○ | ○ | ○ | - | - | - | - | - |
SubForm | acSubForm | 112 | - | - | - | - | - | - | - | - | - | ○ | ○ | - | - | - | - | - | - | - | - | - | - | - | - | - |
Tab | acTabCtl | 123 | - | - | - | - | ○ | ○ | ○ | - | - | - | - | - | ○ | ○ | ○ | - | ○ | ○ | ○ | - | - | - | - | - |
TextBox | acTextBox | 109 | ○ | - | - | ○ | ○ | ○ | ○ | ○ | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | ○ |
ToggleButton | acToggleButton | 122 | ○ | - | - | ○ | - | ○ | ○ | - | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - |
WebBrowserControl | acWebBrowser | 128 | ○ | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - |
何故か
Accessはフォームを扱う性質上コントロールが多くなりがち。
個別にイベント定義を書いていくと散らかりがち。
プロパティウィンドウが散らかりがち。
という理由から、イベントを1箇所にまとめて扱うというのはよくやる手法。
まとめ方は色々あると思うが、個人的にはフォームのロード時に
使用するしないは関係なくすべてのコントロールにイベントの着火先を定義する方法を好んで使う。
例えばすべてのボタンはクリックされると関数 OnClickEvent
を自身のコントロール名付きで呼び出し、
OnClickEvent
はコントロール名に応じて対応する処理を行う。
コードの視認性がよく気に入っている。
Private Sub Form_Load()
On Error Resume Next
Dim con As Control
For Each con In Me.Controls
con.OnClick = "=OnClickEvent(""" & con.Name & """)"
con.OnChange = "=OnChangeEvent(""" & con.Name & """)"
'~以下省略~
Next
On Error GoTo 0
End Sub
Private Function OnClickEvent(ByVal ctrName As String)
Select Case ctrName
Case "Btn_ファイル読み込み"
'処理
Case "Btn_メール送信"
'処理
Case "Btn_閉じる"
DoCmd.Close acForm, Me.Name
' などなど
End Select
End Function
しかし手抜きというか、Form_Load
内で On Error Resume Next
を使用していた。
(LabelにAfterUpdateなど、エラーを無視してすべてのコントロールにイベントをブチ込んでいくイメージ)
美しくないので、ちゃんとコントロールタイプごとに振り分けようと思ったのだが、
Microsoft公式リファレンスでは
「イベント => それに対応したコントロール」 を一覧するのに苦労したので。
参考文献
Microsoft Access 公式リファレンス
https://docs.microsoft.com/ja-jp/office/vba/api/overview/access/object-model