我有两种形式(即frmTest)具有绑定的组合框(即cboTest)。我试图通过public sub来解决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
Acces返回错误"程序...没有找到程序frmTest.btnTest_Click。"
为什么?
参考frmTest.btnTest_Click看起来是正确的。 Sub btnTest_Click声明为public。
谢谢你的帮助。
答案 0 :(得分:0)
你不能用这个方法IMyInterface
创建一个让btnTest_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