2016-04-02 18 views
0

フォームデザインで遊んでいて、今ではほぼ完成したフォームを作成しました。VBAにアクセス - コンボボックス変更イベントをトリガーする

フォームは、「Table1」のIDと「Table2」のIDの2つのフィールドしかない「結合テーブル」にバインドされています。これらの2つのフィールドに基づいて、私は "Table1" & "Table2"のフィールドを同じフォームに追加しました。次に、2つのオプションボタン、1つのコンボボックスと2つのサブフォームを追加しました。

これにより、「Table1」または「Table2」ビューの各観点から、結合された2つの異なるテーブルのレコードを見ることができます。私はComboboxのrowsourceを変更するOptionボタンでこのビューを選択していますので、Comboboxからのレコードに移動することができます。ここで

コード:このコードは唯一のオプションボタンのある投稿を

Private Sub OptButton0_Click() 
     If Me.OptButtonO.Value = True Then 

     Me.OptButton1.Value = False 

     Me.Cmbox.RowSource = "SELECT [Table1].[Field1], [Table1].[Field2], [Table1].[Field3] FROM Table1 ORDER BY [Field1];" 

     Me.Cmbox.SetFocus 
     Me.Cmbox = Me.Cmbox.ItemData(0) 

     End If 

End Sub 

Private Sub Cmbox_AfterUpdate() 
    If Me.OptButton0.Value = True Then 

    If IsNull(Me!Cmbox) Then Exit Sub 

    With Me.RecordsetClone 
     .FindFirst "[Field1] = " & Me!Cmbox 
     If Not .NoMatch Then 
     If Me.Dirty Then Me.Dirty = False 
     Me.MySubform.Width = 8280 
     Me.MySubform.SourceObject = "MySubform" 
     Me.Bookmark = .Bookmark 
     Else 
     Me.MySubform.Width = 8000 
     Me.MySubform.SourceObject = "" 
     End If 

    End With 

Me.Cmbox.SetFocus 
DoCmd.Requery 

End If 

End Sub 

、もう一つは正反対、同じです。今問題は何ですか?

問題は、別のビューの2番目のオプションボタンをクリックしてから同じビューに戻り、別のオプションボタンをクリックしたときのサブフォームの結果は同じですが、コンボボックスのlistIndexは0です。コンボボックスからコンボボックスListindexを選択すると、コードが再び機能します。

基本的に - オプションボタンがクリックされたときにコンボボックスの変更を行うコードが必要です。 Comboboxをクリックしているときに機能しますが、Optionボタンをクリックしたときは機能しません。

私は知っているそれは理解するのは難しいです、コードを見て、何かを尋ねてください。どんな助けもありがたい。

+0

オプションボタンをクリックするか、コードをトリガできるアクションを実行すると、Userform VBAエディタでコンボボックスをデザインする際に、コンボボックスがデザインされているように思えるのですが、基本的にはコンボボックスの変更をトリガーするコードが必要です。そのSubに移動してコードを入力することができます。私は間違っていないなら、これがあなたが必要とするものだと思います。 – newguy

+0

私は説明するのは本当に難しいですが、一番下の行は - 私は一つのレコードを見ています>そして、私は他のオプションボタンをクリックして、他のサブフォームのいくつかの表示を行います>次に私は最初のオプションボタンをクリックし、 Combobox Listindexはこれ以上同じではありません。しかし、コンボドロップダウンリストをクリックすると、コードが再び動作します。このコンボボックスの選択をトリガできる方法はありますか? – LuckyLuke82

答えて

0

コールオプションボタンのクリックイベントでコンボボックスafterupdateイベント:

private sub optbutton0_click() 
    ... 
    cmbox_afterupdate() 
end sub 

PS:むしろ直接のオプションボタンのイベントを持つよりも、あなたがフレームに入れなければならない、(あなたは、その後に持っている場合でも、表示されてからそれを停止するフレームを透明にする)とafterupdateを使用するか、オプションの値によって選択されたオプションボタンを取得することができるフレームのイベントをクリックしてください:

private sub frame0_click() 
    select case frame0 
     case 0 'option button 0 is selected 
      ... 
     case 1 
     ... 
    end select 
end sub 
+0

これは、感謝しました! – LuckyLuke82

0

Accessでは、コントロールが面白いことができます。つまり、オプションを変更すると、画面上で変更されることがわかりますが、コントロールが常に.valueを変更するとは限りません。つまり、Updateを意味しません。この原則を簡単に説明するために、テキストボックスを作成し、その中にいくつかのものを入力して、直接ウィンドウのtextbox.valueを見てください。次に、カーソルをテキストボックスに入れたまま、その一部をバックスペースします。値を再度確認してください。それを数回してください。テストにtextbox.textを含めて開始してください。これを回避する方法は複数ありますが、実際にコントロールがいつ更新されるのかを理解することが最も重要です。いつ、どのような回避策を使用するのが良いかを理解することができます。

ここで、オプションの選択を参照するたびに「クリック」とタイプしました。私はあなたにそれを抱きしめると思います。個人的には、Tabと矢印キーを使用することもありますが、これはやや複雑な答えですが、上記のテキストボックスの例を理解した上で、自分自身で解決する方が良いでしょう。しかし、上記のをClickに変更すると、良い結果が得られます。

つまり、Clickイベントをアクティブにできるマウスクリック以外のイベントがあります。通常は問題はありませんが、フォームの外観、特に幅を変更しているため、ツールを使用しているときにサブフォームの幅が前後に点滅することがあることに注意してください。頻繁には、おそらくあまり煩わしいことではありませんが、なぜ幅を変更する必要があるのか​​、より良いトリガーがあるかどうか再考するかもしれません。

関連する問題