2012-11-29 42 views
0

有一个访问数据库,其表单具有用于生产数据的多个文本框。我需要做的几个箱子的计算,他们被设置为在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 

我不断收到此错误:

Run-time error '2185': You can't reference a property or mathod for a control unless the control has the focus.

这是关于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 

现在,大家谁预览功能知道什么样的数据的文本框应该包含,更重要的是,什么样的结果的函数返回。

+0

任何想法如何让我的文本框显示一个十进制数?它应该是1.4936并且一直显示1 – designspeaks

+0

更改文本框的“格式”属性。您有多种选择:常规编号,货币,标准等,或者您可以输入格式,如“#。####”或“0.0000”。 –

0

首先,行

ctrl.Text = calculate 

应该是

ctrl.Text = calculateBoardFeet() 

接下来,代码

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

应该是

calculateBoardFeet = txtA.Value * txtB.Value * txtC.Value/144 
+0

好吧,对不起,我改了名称来简化它,忘了更改boardfeet的计算。它现在已经修复了。这不是问题。 :) – designspeaks