【问题标题】:Calling SubForm routine from another Form从另一个窗体调用 SubForm 例程
【发布时间】:2015-09-13 08:23:27
【问题描述】:

我有一个表单 X,其中包含一个子表单 Y。在 Y 表单中定义了一个例程。我需要在此表单 Z 的关闭事件中从另一个表单 Z(当用户单击子表单 Y 上的某个按钮时打开)调用该例程。表单 X 已打开。我到目前为止所尝试的都不起作用:

// 形式 Z

Call Forms("X").SomeRoutine
Call Forms("Y").SomeRoutine

但每次我收到运行时错误 2450 时,Access 都找不到表单。

【问题讨论】:

  • 参考子表单access.mvps.org/access/forms/frm0031.htm确保子/函数不是私有的。
  • 确保表单 Sub 是 Public (Public SomeRoutine() ...);然后使用 Call MyForm.SomeRoutine 从表单外部调用它。
  • 是的 sub /function 只是公开的。
  • 调用表单!X!Y.SomeRoutine()
  • 谢谢 .. 我试过了,但它不起作用。 .. :(

标签: forms ms-access vba ms-access-2007


【解决方案1】:

我的 X 表单包含一个名为 Child1 的子表单控件。 Y 是包含在 Child1 中的子表单。

Form Y 包含这个Public VBA 程序:

Public Sub SomeRoutine()
    Debug.Print "this SomeRoutine in form " & Me.Name
End Sub

在表单视图中打开父表单 (X),我可以转到立即窗口 (Ctrl+g) 并调用SomeRoutine 像这样...

Forms!X!Child1.Form.SomeRoutine
this SomeRoutine in form Y

关键是我使用了包含 Y 子窗体的子窗体 control 的名称。 (注意Y 甚至没有出现在Forms!X!Child1.Form.SomeRoutine 中)

子窗体控件的名称可能与它所包含的窗体的名称相同...但不必相同。检查您的以确保您使用控件的名称。

【讨论】:

    【解决方案2】:

    这是Forms!X!Y.Form.SomeRoutine - 您必须明确填写表格

    【讨论】:

      【解决方案3】:

      你不能加个好友吗?像这样

      Friend Sub cmd_Click()
        'code
      End Sub
      
      Private Sub Form_Open(Cancel As Integer)
        Me.cmd_Click
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        相关资源
        最近更新 更多