0

有一个带有多个用于生产数据的文本框的表单的访问数据库。我需要用一些盒子做一个计算,它们被设置为


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 的。

4

2 回答 2

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

现在,每个查看函数的人都知道文本框应该包含什么样的数据,更重要的是,函数返回什么样的结果。

于 2012-11-29T15:54:57.583 回答
0

首先,线

  ctrl.Text = calculate

应该

  ctrl.Text = calculateBoardFeet()

接下来是代码

  calc1 = txtA.Value * txtB.Value * txtC.Value / 144

应该

  calculateBoardFeet = txtA.Value * txtB.Value * txtC.Value / 144
于 2012-11-29T15:55:01.590 回答