所以我有一个子窗体VBA函数,如下所示:
Function GetVariable() As Double
' <control> = DLookup("<table var>","<table>", "<other table var> = <control>"
[someFunction] = DLookup("[Var]", "[tblExample]", "[tblExampleVar] = [subFormControl]")
' (return) = ( <control> - <otherControl>) / 12345.12
GetVariable = ([finalPosition] - [someFunction]) / 12345.12
End Function
当我打开父窗体(包含该子窗体的窗体)时,出现错误,“运行时错误'2447”。.(点)或!运算符的使用无效,或者括号无效。 “
我从中收集的信息是Access将12345.12解释为一个对象,但我不明白为什么。当我单独运行此子窗体时,它可以工作,但是当它是子窗体时,它却不能。以前有没有人处理过?
其他信息:在此父表单中,我有两个使用相同计算的子表单,都在其特定于表单的VBA中重复,并且我认为它们不会相互冲突,因为它们不共享范围。因此,我的结论仍然是Access试图使用12345.12作为(object).member。
感谢阅读。
答案 0 :(得分:0)
当一个表单独立打开时引用会起作用,而当同一表单用作子表单时,引用不一定会起作用。这需要引用以包含子窗体容器名称。
我看不到以独立形式运行表单如何返回正确的数据。我假设[subFormControl]是表单上的字段或控件。这是一个变量输入。变量必须在DLookup()WHERE条件表达式中串联。
似乎这些字段返回控件或表的名称。这些名称是否有空格或标点符号/特殊字符(下划线除外)。确实不应使用名称,也不应使用保留字作为名称。如果这样做,则需要用[]
分隔。
如果您要引用表单上的字段/控件以构建DLookup(),则所有输入都是变量,应将其串联起来。
[someFunction] = DLookup("[" & [Var] & "]", "[" & [Table] & "]", "[" & [Condition] & "] = '" & [subformControl] & "'")
是否需要定界符(以及哪些定界符)取决于过滤条件中条件输入将返回的字段的字段类型。
答案 1 :(得分:0)
尝试照顾 Null 值并更具体。
此外,必须将小数点值连接为带点小数点分隔符的字符串:
Function GetVariable() As Double
If Not IsNull(Me![subFormControl].Value) Then
Me![someFunction].Value = DLookup("[Var]", "[tblExample]", "[tblExampleVar] = " & Str(Me![subFormControl].Value) & "")
If Not IsNull(Me![finalPosition].Value - Me![someFunction].Value) Then
GetVariable = (Me![finalPosition].Value - Me![someFunction].Value) / 12345.12#
End If
End If
End Function