在访问vba中创建一个没有错误的自定义函数但是没有结果?

时间:2016-12-15 17:48:16

标签: vba ms-access

我在访问的用户表单上有很多文本和组合框。我正在为他们的更新事件编写vba代码。很多按钮具有相同的代码,所以我正在编写一个可以在多个组合框和文本框上使用的函数。

我将在本例中使用我的一小部分代码,

Option Compare Database
Function comboboxupdate(RowNumber As Variant)

        Dim x As Variant
        Dim y As Variant

        x = "tb_LbrRate" & RowNumber & ".Value"
        y = "cb_op" & RowNumber & ".Value"
        x = DLookup("LaborRate", "tblOperationsType", "[operationsID]" = y)

End Function

Private Sub cb_op1_AfterUpdate()

        Call comboboxupdate(1)
        'tb_LbrRate1.Value = DLookup("LaborRate", "tbloperationsType", "[operationsID] = cb_op1.value")

End Sub

当我单步执行子程序和函数时,我没有错误,我注意到当我将鼠标悬停在标题中显示的x和y变量上时 x =“tb_LbrRate1.value”y =“cb_op1.value”。这看起来像连接 工作正常,但我很好奇,但它是围绕价值观引用?含义

“tb_LbrRate1.value”= Dlookup(“laborRate”...而不是  tb_LbrRate1.value = Dlookup(“laborRate”......

最后,在更新子例程之后的注释代码工作,所以我只需要我的函数来模拟它,但是可以灵活地处理多个组合和列表框。

1 个答案:

答案 0 :(得分:1)

该语句只是改变变量x的值,而不是指texbox control which's name is x。您需要通过其名称获取控件,如此线程中的函数GetControlByNameName of object changes in function

然后你可以:

 Dim x as Object, y as object
 set x = GetControlByName("tb_LbrRate" & RowNumber)
 set y = GetControlByName("cb_op" & RowNumber)
 x.Value = DLookup("LaborRate", "tblOperationsType", "[operationsID] = " & y.Value)