使用双常量作为对象访问2016 Subform VBA吗?

时间:2018-10-05 17:50:03

标签: vba object ms-access double

所以我有一个子窗体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。

感谢阅读。

2 个答案:

答案 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