将替代 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 搜索报告的问题