2016-05-19 27 views
1

フォームにいくつかのコントロールがあり、ユーザーまたはvbaがこれらの変更を行ったかどうかにかかわらず、これらのコントロールの変更をすべて検出します。変更が別の関数から発生した場合、イベントが発生しないようにします。

私は(例えばコンボボックスに)このコードを試してみてください。

Private Sub Combo3_Change() 
MsgBox "test" 
End Sub 

Private Sub Command0_Click() 
Me.Combo3.Value = 5 
End Sub 

それは、ユーザが変更を加えたものの場合、私は同じ変更を行うコマンドボタンをクリックした場合、それは動作しません動作します。

更新イベント後も試してみましたが動作しません。

注:私はExcelで同じコードを持っており、完全に動作します。

答えて

2

これは仕様です。 Control_AfterUpdateは、コントロール値がコードによって変更されたときには実行されません。

コードを実行するには(通常は_AfterUpdate_Changeは通常意味がありません)、実行するには変更後に自分で呼び出す必要があります。

+0

はありがとうございました、私の問題は、複数の機能から変更されたコントロールがたくさんあることです。私はあなたと@Scott Joreの提案を試してみます – Fadi

1

AccessフォームとExcelフォームを前後に変更する際には、細心の注意が必要です。彼らは非常によく似ていますが、それぞれ独自のフォームライブラリを持っており、イベントは違った発砲をします。 ComboBoxは、変更をキャッチしようとすると特に面倒です。変更が行われたときに、あなたのコードは常に発動することを確認するために

一つの方法は、プロパティを作成し、コード内で値を変更する場合、直接プロパティの代わりに、コンボボックスを変更することです:

Private Property Let Fruit(vNewValue As String) 
    Combo3.Value = vNewValue 
    Combo3_Change 
    End Property 

    Private Property Get Fruit() As String 
    Fruit = Combo3.Value 
    End Property 

    Private Sub Combo3_Change() 
    Label5.Caption = Combo3.Value 
    End Sub 

    Private Sub Command2_Click() 
    Fruit = "Grapes" 
    End Sub 
+0

ありがとう、私はそれを試してみませんか?@Andreの回答は私が多くのコントロールを持っています。 – Fadi

+0

私はそれを(クラスモジュールを使って)テストして100%働いたが、それは事態を複雑にするので、@ Andreの答えのような 'change event'を単に呼び出す。 – Fadi

+1

問題ありません、ご迷惑をおかけして申し訳ありませんでした。 –

関連する問題