我在访问的用户表单上有很多文本和组合框。我正在为他们的更新事件编写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”......
最后,在更新子例程之后的注释代码工作,所以我只需要我的函数来模拟它,但是可以灵活地处理多个组合和列表框。
答案 0 :(得分:1)
该语句只是改变变量x的值,而不是指texbox control which's name is x
。您需要通过其名称获取控件,如此线程中的函数GetControlByName
:Name 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)