2

Access2010でコンボボックスのイベントを管理するクラスを作成しようとしています。コードは次のとおりです。

クラスTestEvents

Public WithEvents cbMyCombo As Access.ComboBox

Public Property Get AssociatedCombo() As Access.ComboBox
    Set AssociatedCombo = cbMyCombo
End Property

Public Sub cbMyCombo_Change()
    MsgBox "Combo has changed!"
End Sub

Private Sub Class_Initialize()
   Set cbMyCombo = Form_Form1.Combo1
End Sub

Form1コード(Combo1という名前のコンボボックスが含まれています)

Option Compare Database
Option Explicit
Private MyTestEvents As TestEvents

Private Sub Form_Load()
   Set MyTestEvents = New TestEvents
   MsgBox MyTestEvents.AssociatedCombo.Name
End Sub

コードを実行すると、(予想どおり)コンボボックス名(Combo1)のメッセージが表示されるため、TestEvents.AssociatedComboプロパティは正しいオブジェクトを指しています、コンボ値を変更しても何も起こりません。「コンボが変更されました」というメッセージが表示されると思います。

私が間違っていることはありますか?

よろしくお願いします:)

4

1 に答える 1

1

デフォルトでは、フォームコントロール用にサンクされたイベントはVBAではまったく発生しません。それらを有効にするには(そしてその後にを有効にするにはWithEvents)、処理する各イベントを接続する必要があります。

Set cbMyCombo = Form_Form1.Combo1 '//please put this in a property!

cbMyCombo.OnKeyDown = "[Event Procedure]"
cbMyCombo.OnBlaDeBla = "[Event Procedure]"

(これは、プレースホルダー/例ではなく、設定する必要のある実際の文字列値であることに注意してください)

これは、コントロールプロパティの[イベント]タブでも実行できます。

于 2012-06-28T10:30:34.063 に答える