OpenArgs是Null错误

lam*_*cro 9 ms-access openargs openform access-vba

我在使用时使用OpenArgs参数发送值DoCmd.OpenForm:

DoCmd.OpenForm "frmSetOther", acNormal, , , acFormAdd, acDialog, "value"
Run Code Online (Sandbox Code Playgroud)

然后我Me.OpenArgs在打开的表单中使用以获取.它有时会发送Null值而不是原始字符串.怎么了?

Mat*_*agé 23

这通常发生在开发期间,表单已经被oppened(例如在编辑模式下),并且您调用了docmd.OpenForm函数.在这种情况下,表单处于正常(视图)模式,并引发OnOpen和OnLoad事件,但OpenArgs属性设置为null,而不是您传递给docmd.OpenForm的内容.

显然,在使用docmd.OpenForm调用表单之前关闭表单.但是我想使用一种解决方法.在OnOpen事件中,我检查me.OpenArgs是否为null,如果是,我将其替换为一些调试值.

if not isnull(me.OpenArgs) then
   myvalue = me.OpenArgs
else
   msgbox "Debug mode"
   myValue = "foo"
endif
Run Code Online (Sandbox Code Playgroud)


小智 8

我刚遇到这个问题.该Arg字符串没有获得通过,因为该报告已经打开,但不可见.当代码崩溃时,它一直处于打开状态Null string error.

解决方案是在即时窗口中关闭报告

Docmd.Close acReport, "myReport"
Run Code Online (Sandbox Code Playgroud)

它修复了我的bug并且args正确传递了.


Phi*_*ier 3

这个“openArgs”参数的一个非常有趣的替代方法是使用 currentProject.allforms("myFormName") 对象的 .properties 集合。当您需要将值传递给表单(例如从另一个控件或另一个表单继承的过滤器)时,只需为表单添加相应的属性,然后将您的值添加到该属性即可。

例子:

addPropertyToForm "formFilter","Tbl_myTable.myField LIKE 'A*'",myFormName
Run Code Online (Sandbox Code Playgroud)

被调用的函数将尝试更新对象的“formFilter”属性的值。如果该属性不存在(引发 err 2455),它将作为新属性添加到错误管理代码中。

Function addPropertyToForm(_ 
    x_propertyName as string, _
    x_value As Variant, _
    x_formName As String) 
As Boolean

On Error GoTo errManager
CurrentProject.AllForms(x_formName).Properties(x_propertyName).Value = x_value
addPropertyToForm = True
On Error GoTo 0

Exit Function

errManager:
If Err.Number = 2455 Then
    CurrentProject.AllForms(x_formName).Properties.Add x_propertyName, Nz(x_value)
    Resume Next
Else
    msgbox err.number & ". The property " & x_propertyName & "was not created"
End If

End Function 
Run Code Online (Sandbox Code Playgroud)