- 締切済み
access イベント名取得方法
accessでフォーム、またはコントロールのイベント名の取得方法を教えてください。 フォーム、コントロール、レポートには、それぞれプロパティシートを持っていて、開くと、 「書式」「データ」「イベント」「その他」「すべて」の4つのタブに分かれています。 やりたいことは、この4つの中で「イベント」タブにある内容をイベント毎に取得したいのです。 <コーディング例> '全フォームループ For Each OBJ In CurrentProject.AllForms 'フォームを開く DoCmd.OpenForm OBJ.NAME, acDesign '****************************************************** '*** ここでフォームのイベントタブの内容を取得したい *** '****************************************************** '全コントロールに対してループ For Each CTL In Forms(OBJ.NAME).Controls '****************************************************** '*** ここでフォームのイベントタブの内容を取得したい *** '****************************************************** Next CTL Next OBJ <取得結果の例> 1.クリック時:[イベントプロシージャ] 2.更新後処理:aaa() どなたかご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
以下の方法でイベントを列挙する事ができました。 イベントだけを表示する条件文を消せば「イベント」だけでなく「書式」「データ」「その他」など、すべてのプロパティを表示する事も出来ます。 なお「inCtrl.Properties(i).Valueの値がブランクの物は表示しない」と言う修正を行なえば「イベントが設定されている物」だけを表示出来ます。 因みに、buf変数の中身が長いと表示し切れなくなるので、20個づつ表示しています。 Option Compare Database Public Function get_controls() Dim obj As AccessObject Dim myDB As Object Dim formname As String Dim ctl As Control '自分自身(MDB)を取得する Set myDB = Application.CurrentProject 'すべてのフォームを取得 For Each obj In myDB.AllForms formname = obj.Name 'フォームをデザイナで開く DoCmd.OpenForm formname, acDesign, , , , acHidden 'フォームのプロパティを表示 Call Display_Propatey("(なし)", Forms(formname)) 'フォーム内のコントロールを取得 For Each ctl In Forms(formname).Controls '各コントロールのプロパティを表示 Call Display_Propatey(formname, ctl) Next ctl 'フォームを閉じる DoCmd.Close acForm, formname, acSaveNo Next obj Set myDB = Nothing End Function Private Function Display_Propatey(ByVal ParentFormName As String, ByVal inCtrl As Object) Dim buf As String Dim i As Long Dim j As Long Dim k As Long On Error Resume Next '共通部の取得 buf = "親フォーム=" & ParentFormName & vbCrLf buf = buf & "Name=" & inCtrl.Name & vbCrLf buf = buf & "TypeName=" & TypeName(inCtrl) & vbCrLf 'プロパティの中身を取得 j = 0 k = 0 For i = 0 To inCtrl.Properties.Count - 1 'イベントプロパティ(Categoryが4かつTypeが8の物)だけを表示 If inCtrl.Properties(i).Category = 4 And inCtrl.Properties(i).Type = 8 Then buf = buf & inCtrl.Properties(i).Name & "=" & inCtrl.Properties(i).Value & vbCrLf '20個づつ表示 If (j Mod 20) = 0 Then If k <> 0 Then buf = buf & "(Page = " & k & ")" MsgBox buf buf = "" End If k = k + 1 End If j = j + 1 End If Next '残りがあるなら残りを表示 If buf <> "" Then buf = buf & "(Page = " & k & ")" MsgBox buf End If End Function
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
「イベントタブの内容(どんなイベントが並んでいるか?)」を列挙する事は出来ません。 イベントは「AfterUpdate」とか「OnClick」とかのイベントプロパティの内容を個別に操作する事は出来ますが、どんなイベントプロパティがあるかを列挙する事は出来ません。
お礼
早々のご回答ありがとうございます。 イベントを指定してLOOPするしか方法はないんですね。 コントロールによってイベントも違う為困りました… もう少し、いい案を検討してみます。