2017-08-30 61 views
0

我有Access窗體與列表框和組合框。訪問列表框更新後不更新時選擇= True

Private Sub Form_Open(Cancel As Integer) 
    '... misc code 
    me.comboBox.RowSource = "sql statement" 
    call comboBox_AfterUpdate 
End Sub 

Private Sub comboBox_AfterUpdate() 
    listbox.Selected(0) = true 
End Sub 

Private Sub listbox_AFterUpdate() 
    '.... important code that updates the form 
End Sub 

在形式負載/打開時,代碼運行作爲

Form_Open > comboBox_AfterUpdate > listbox_AfterUpdate 

形式已加載後然而,當組合框被改變並且comboBox_AfterUpdate被觸發,listbox_AfterUpdate()沒有被觸發。

我會將listbox_AfterUpdate()中的代碼移動到一個單獨的子例程,但這會調用代碼以在窗體加載時運行兩次。任何想法爲什麼發生這種情況?

類似的問題在這裏: http://www.tek-tips.com/viewthread.cfm?qid=1395160

+2

當通過代碼更改控件的值時,'AfterUpdate'事件不會觸發。 – Andre

+0

@Andre就是我的想法,但它在窗體加載時會觸發。但在窗體已經加載後更改代碼中的值不會觸發事件。我想禁用這個功能,雖然我很確定這是不可能的。 –

回答

0

您可以使用兩個自定義功能和使用可選參數來了解其被稱爲上下文。這樣你就可以完全控制哪個函數執行哪個操作。

E.g.

Public Sub MyFunc1 (Optional CalledFromLoad As Boolean) 
Public Sub MyFunc2 (Optional CalledFromLoad As Boolean) 

Private Sub comboBox_AfterUpdate() 
    Call MyFunc1 False 
End Sub 
Private Sub listbox_AFterUpdate() 
    Call MyFunc2 False 
End Sub 
Private Sub Form_Open(Cancel As Integer) 
    Call MyFunc1 True 
End Sub 

移動您的所有代碼將爲您提供更大程度的自定義,並且可以幫助您避免兩次調用相同的代碼。

您可以在MyFunc1中設置全局變量,然後通過更改列表框來觸發MyFunc2,然後再次重置該全局變量。許多解決方案都是可能的。