在VBA中计算

时间:2012-11-29 15:36:56

标签: vba ms-access access-vba

拥有一个访问数据库,其表单包含多个生产数据文本框。我需要用几个方框进行计算,它们被设置为


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有关。

2 个答案:

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