将替代OpenArgs传递给使用' New'创建的Access表单。

时间:2015-07-02 13:45:09

标签: vba ms-access access-vba ms-access-2010

方案:我尝试使用此代码根据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 个答案:

答案 0 :(得分:1)

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

这将永远不会起作用,因为Access表单是由应用程序实例化的,并且您实际上无法控制事件。如果你绝对不能使用内置的OpenArgs,那么你可以做一些这样的事情,你从Property中运行一个例程让:

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"