2017-03-07 56 views
1

我有一些綁定組合框(即cboTest)的形式(即frmTest)。我試圖通過一個公共子組來解決NotInList事件,這個子組調用這些形式的回調按鈕點擊子(即btnTest_Click)。調用來自模塊的私有子,級聯引用

表單frmTest:

Private Sub cboTest_NotInList(NewData As String, Response As Integer) 
    Response = acDataErrContinue 
    Item_NotInList NewData, Me, "btnTest" 
End Sub 

Public Sub btnTest_Click 
    '.... 
End sub 

模塊:

Public strNotInList_Text As String 
'public variable to store entered text 

Public Sub Item_NotInList (strNewData As string, frmForm As Form, strControl As String) 
    Dim strControl_Sub As String 
    strNotInList_Text = strNewData 
    strControl_Sub = "." & strControl & "_Click" 
    Application.Run frmForm.Name & strControl_Sub 
End Sub 

艾策斯返回一個錯誤。 「計劃......沒有找到一個過程frmTest.btnTest_Click」

爲什麼?

引用frmTest.btnTest_Click看起來是正確的。 Sub btnTest_Click被聲明爲公共。

謝謝你的幫助。

+0

如果不在表單中存儲'btnTest_Click',將其存儲在模塊中('btnTestClick')並使用'Sub btnTest_Click()\\ btnTestClick \\ End Sub'從測試按鈕中調用它會更好。 – Wolfie

+0

非常感謝您的回覆。但btn ..._點擊各種形式的子目前正在處理各種程序;這就是爲什麼我使用btn ..._在表單中單擊subs。 – Duski

+0

運行根本無法做到這一點。你可以使用一個存儲表單的公共對象變量,然後直接調用它的方法,或者創建例程Public並使用CallByName來調用它。我不能說我看到這個設置有任何好處。 – Rory

回答

0

難道你不能用這個方法創建一個接口,例如IMyInterfacebtnTest_Click(應該命名爲不同的名稱),並讓你想調用這個方法的表單實現這個接口。然後改變的Item_NotInList這樣的簽名:

Public Sub Item_NotInList (strNewData As string, frmForm As IMyInterface, strControl As String) 
' ... 
frmForm.btnTest_Click 
' ... 

因爲形式的實例是Item_NotInList只需調用目標方法的方法可用。這有幫助嗎?


實施例:

添加類模塊並將其命名爲例如IMyInterface(可根據您的需要命名)。添加方法的空體(不要添加任何實現)。

IMyInterface的

Public Sub TestClick() 
    ' will be implemented in your forms 
End Sub 

然後在你的形式實現此接口,例如在形式frmTest和其他應與Item_NotInList方法一起使用。

表格frmTest例如

Implements IMyInterface 

Private Sub IMyInterface_TestClick() 
    ' here goes your implementation 
End Sub 

標準模塊的測試代碼

Sub test() 
    Dim f1 As UserForm1 
    Set f1 = New UserForm1 

    Item_NotInList f1 

    Dim f2 As UserForm2 
    Set f2 = New UserForm2 

    Item_NotInList f2 
End Sub 

Sub Item_NotInList(testForm As IMyInterface) 
    testForm.TestClick 
End Sub 

那它。 HTH

+0

謝謝你的迴應,迪,但我擔心你的解決方案對我來說太複雜了。我不明白,你在界面下的意思。我在VBA中並不是很先進。 – Duski

+0

請參閱編輯答案和示例代碼。 HTH – dee