1

事前に助けてくれてありがとう。機能がよくわからない…

タイプ、金額、単位などのフィールドのリストを含むサブフォームがあります。選択したタイプに基づいて合計金額を計算したいと思います。そうすることで、コーディングを使ってみましたが、さまざまなエラーが発生しました。

まず、「実行時エラー '3078':」Microsoft Jet データベース エンジンは入力テーブル/クエリ '50000' を見つけることができません。

これに対する私のコードは次のとおりです。

If Me.cmbTOL1 = "Type B" Then
Me.txtC1 = (DMax(Me.txtAmt1, 50000) * 0.055) / Me.txtNoofUnits1
End If

次に、「ランタイム エラー '2450':」Mircosoft Access は、マクロ式または Visual Basic コードで参照されているフォーム「frmInformation」を見つけることができません。

これに対する私のコードは次のとおりです。

If Me.cmbTOL1 = "Type M" Then
Me.txtC1 = (DMax(Me.txtAmt1, (2 * [Forms]![frmInformation]![GrossAmt])) * 0.015) / Me.txtNoofUnits1
End If

編集:

frmInformation から値 [GrossAmt] を取得しようとしています。[Forms]![frmInformation]![GrossAmt] 以外に値を取得する方法はありますか?

私は本当に DMax() 関数を取得しません...しかし、私は自分のコードをこれに変更しました...

If Me.cmbTOL1 = "Type B" Then 
   If Me.txtAmt1 > 50000 Then 
   Me.txtC1 = (Me.txtAmt1 * 0.055) / Me.txtNoofUnits1 
   Else 
   Me.txtC1 = (50000 * 0.055) / Me.txtNoofUnits1 
   End If 
End If
4

1 に答える 1

1

DMin, DMax Functionsから、構文は次のとおりです。

DMax(expr, domain[, criteria])

2 番目の引数domainは、「ドメインを構成する一連のレコードを識別する文字列式です。これは、テーブル名またはパラメーターを必要としないクエリのクエリ名にすることができます。

しかし、あなたのコードはドメイン引数DMax()に数値を与えます:

DMax(Me.txtAmt1, 50000)
DMax(Me.txtAmt1, (2 * [Forms]![frmInformation]![GrossAmt]))

あなたが何を達成しようとしているのか理解できません。ただし、 を使用する場合は、ドメイン引数DMax()としてテーブルまたはクエリの名前を指定する必要があります。ドメイン内のフィールドの名前、またはフィールドに基づく式である必要があります。Me.txtAmt1

Access がフォーム "frmInformation" を見つけられないというエラー メッセージは、フォームが開いていない (したがって Forms コレクションに存在しない)、名前のスペルが間違っている、または実際には別のフォームに含まれるサブフォームであることが原因である可能性があります。

あなたの質問では、コードの更新で何が起こるかを説明していません。イミディエイト ウィンドウに次の行を入力して を押すとどうなるか教えてくださいEnter

? [Forms]![frmInformation]![GrossAmt]

Ctrl+でイミディエイト ウィンドウを開くことができますg。上記frmInformationの行をイミディエイト ウィンドウに入力すると、フォーム がフォーム ビューで開かれます。

次のように、イミディエイト ウィンドウから開いているすべてのフォームの名前を、Access が認識しているとおりに確認できます。

for each f in forms : ? f.Name : next
于 2013-01-16T08:03:54.507 に答える