从另一种形式调用方法

时间:2013-05-08 17:19:30

标签: ms-access

我有一个包含两个子表单的导航表单,如下所示:

enter image description here

单击子窗体A中的按钮时,我想调用子窗体B中的方法。方法定义如下:

Public Sub MyMethod()
    Debug.Print "MyMethod called"
End Sub

我尝试使用Forms!SubformB.MyMethod,但收到错误Database cannot find the referenced form 'SubformB'。在参考this页面时,我也尝试了Forms!NavigationForm!SubformB.MyMethod,但后来我得到Database cannot find the referenced form 'NavigationForm'。有谁知道如何正确地做到这一点?

谢谢。

3 个答案:

答案 0 :(得分:1)

表单的类模块中定义的

FunctionSub过程被视为对该表单是私有的。如果您想要可以从多个不同表单调用Sub,请将Sub移动到“常规”VBA模块(即,从菜单中选择Insert > Module时创建的模块VBA编辑器中的栏)并确保将其声明为Public

答案 1 :(得分:1)

下面是一段代码片段,它在单击主窗体上的按钮时可以获取子窗体的AllowEdits方法。很确定这就是你所追求的。

Function ToggleEditStatus_Child(WhichForm, WhichChild As String)
 'Changes the AllowEdits setting of the SubForm parameter

 Dim Cform As Object

 Set Cform = Forms(WhichForm).Controls(WhichChild).Form
 Cform.AllowEdits = Not Cform.AllowEdits
 Forms(WhichForm).Refresh
 Cform.Refresh
 Forms(WhichForm).Controls(WhichChild).SetFocus
 Set Cform = Nothing

End Function

答案 2 :(得分:0)

我确实想到了这一点,但有一个问题 - 另一种形式必须是开放的。这对我有用,所以我在这里发布解决方案。

首先,导航到表单:

DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
ObjectName:="SubformB", _
PathToSubformControl:="NavigationForm.NavigationSubform", _
DataMode:=acFormEdit

然后指向子表单:

Dim f As Form_SubformB
Set f = Forms("NavigationForm").NavigationSubform.Form

你可以自由地调用这个方法:

f.MyMethod()

注意:您很可能必须使方法Public才能生效。