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」:コントロールにフォーカスがない限り、コントロールのプロパティまたはmathodを参照することはできません。

これは、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 に答える