从模块调用private sub,连接引用

时间:2017-03-07 10:44:32

标签: vba access

我有两种形式(即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。

谢谢你的帮助。

1 个答案:

答案 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