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正确传递了.
这个“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)