将替代 OpenArgs 传递给使用“新建”创建的访问表单

Posted

技术标签:

【中文标题】将替代 OpenArgs 传递给使用“新建”创建的访问表单【英文标题】:Passing alternative OpenArgs to Access Forms created with 'New' 【发布时间】:2015-07-02 13:45:09 【问题描述】:

场景:根据Rubberduck 的建议,我尝试使用此代码创建替代 OpenArgs 属性,但我无法使其正常工作。我想我在这里遗漏了一些东西,但不知道是什么。

守则:

Public varAltOpenArgs As Variant
Dim FormX as form

Public Property Let AltOpenArgs(value As Variant)
    varAltOpenArgs = value
End Property

Public Property Get AltOpenArgs() As Variant
    AltOpenArgs = varAltOpenArgs
End Property

从这个表单 (form1) 打开一个新的表单实例:

Set frmX = New 
frmX.AltOpenArgs = "abcde"
frmX.SetFocus

问题:AltOpenArgs 属性在Form_Open 中调用时包含一个空字符串(“”)。

谁能指出我正确的方向?我正在使用 Access 2010 (32)。

【问题讨论】:

【参考方案1】:

问题是,在您设置 AltOpenArgs 值的下一行代码运行之前,所有事件都会在您创建新实例 (Set frmX = New Form_MyExampleForm) 后立即触发。

这永远不会起作用,因为 Access 表单是由应用程序实例化的,而您实际上无法控制事件。如果您绝对不能使用内置的OpenArgs,那么您可以在从 Property Let 运行例程的地方执行类似的操作:

Public Property Let AltOpenArgs(value As Variant)
    varAltOpenArgs = value
    FancyRoutine
End Property

Private Sub FancyRoutine() 
    'Do whatever fancy stuff you want to do
    MsgBox AltOpenArgs
End Sub

我按照您正在尝试的方式(尽管不使用Form_Open 事件)为子表单做一些事情。它可能看起来像这样:

Dim frm As Form_MyExampleForm
Me.SubformControl.SourceObject = "MyExampleForm"
Set frm = MainSubform.Form
frm.AltOpenArgs = "whatever you want"

【讨论】:

嗨,唐。感谢您的回复。更具体地说(好的,我应该从一开始就提供更多信息)我不能使用 OpenForm 命令,因为我正在重用相同的表单(多实例) Set Form2 as New Form_Form1 将不起作用。但作为一种解决方法,我现在使用 TempVars![AltOpenArgs],这对我来说效果很好。

以上是关于将替代 OpenArgs 传递给使用“新建”创建的访问表单的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2007 - OpenArgs 没有将值传递给下一个表单?

在 Access VBA 中使用 openargs 搜索报告的问题

将 PHP 变量传递给 Javascript

如何使用 Rails 代码/将变量传递给 .coffee javascript 文件?

将 Python 类实例传递给 C++ 函数

MS Access VBA - 不知何故没有通过 OpenArgs,总是 NULL