拥有一个访问数据库,其表单包含多个生产数据文本框。我需要用几个方框进行计算,它们被设置为
txtA * txtB * txtC = txtD
我需要从每个框中获取值并在幕后执行此计算。所以我需要来自txtA * txtB * txtC的值,并在txtD中显示该计算的答案。我一直遇到问题,因为我的表单上有多少个文本框,它总是会收到错误的数据?帮助!
Private Sub btnCalculate_Click()
Dim ctrl As Control
Dim txt As TextBox
For Each ctrl In Form.Controls
If TypeOf ctrl Is TextBox Then
Set txt = ctrl
If txt.Name = "txtD" Then
Set txt = ctrl
ctrl.SetFocus
ctrl.Text = calculate
End If
End If
Next ctrl
End Sub
Public Function calculate()
Dim calc1 As Double
calc1 = txtA.Value * txtB.Value * txtC.Value / 144
End Function
我一直收到这个错误:
运行时错误' 2185': 除非控件具有焦点,否则您无法引用控件的属性或方法。
这与txtA,txtB,txtC有关。
答案 0 :(得分:1)
尝试
txtD = calculate()
或
Me!txtD = calculate()
如果出于某种原因,您希望按名称访问控件,请按照
进行操作Dim name As String
name = "txtD"
Me(name) = calculate()
您的计算功能必须将结果分配给函数名称。一个潜在的问题是你忽略了类型。哪种类型是函数的结果?如果您没有指定类型(并且变体可以包含任何内容),它将被键入为Variant
。更好
Public Function calculate() As Double
calculate = CDbl(txtA.Value) * CDbl(txtB.Value) * CDbl(txtC.Value) / 144
End Function
现在,每个查看函数的人都知道文本框应该包含哪种数据,更重要的是,函数返回的是什么类型的结果。
答案 1 :(得分:0)
首先,该行
ctrl.Text = calculate
应该是
ctrl.Text = calculateBoardFeet()
接下来,代码
calc1 = txtA.Value * txtB.Value * txtC.Value / 144
应该是
calculateBoardFeet = txtA.Value * txtB.Value * txtC.Value / 144