1

Microsoft Access には 2 つのフォームがあります。1 つは Bill と呼ばれ、もう 1 つは Payment と呼ばれます。どちらも、両方のフォームのフィールドとして合計金額を持っています。Bill の合計金額を Payment の合計金額に参照しようとしています。

Payment 総額管理ソースで試してみました : =Forms!Bill![Total Amount]

しかし、これはうまくいかないようです。デザイン ビューでは、「#Name?」と表示されます。テキストボックスに。

これをどのように行いますか?

4

3 に答える 3

2

いずれかのフォームがサブフォームですか? その場合、サブフォーム コントロールまたは親プロパティを参照する必要があります。

Me.Parent.[Total order]
Me.[Subform Control name Here].form.[Total order]

サブフォーム コントロール名は、含まれているフォームと常に同じではないことに注意してください。

編集: Me を省略するか、コントロールで Form!FormName を使用します。

EDIT2: フォーム、サブフォーム、およびコントロールを参照する通常の方法は、バン (!) またはドット (.) を使用することに注意してください。括弧と引用符はめったに使用されません。これは、Microsoft Access MVP サイト ( http://www.mvps.org/access/forms/frm0031.htm ) と Microsoft 自身のサイト ( http://support.microsoft.com/kb/209099 )の両方で確認できます。ノックスが述べたように。

そうでない場合は、式ビルダーを試しましたか? 正しい名前を持っていることを確認するのに役立ちます。

余談ですが、フィールドとコントロールの名前にスペースを入れないことをお勧めします。これにより、かなりの作業を節約できます。また、コントロールに含まれるフィールドと同じ名前にならないように、コントロールの名前を変更することをお勧めします (たとえば、txtOrderTotal)。

于 2008-11-07T23:09:57.000 に答える
0

Remouの答えはコードでのみ機能します-ただし、テキストボックスのコントロールソースを定義しているように見えるので、これを試してください:

=Forms("Bill")![Total order]
于 2008-11-08T00:01:31.203 に答える
0

私のお気に入りの解決策は、常にレコードセットに戻って、対応する合計を計算することです。これは、フォーム レベルの合計が正しく更新されているかどうかを常に確認できるとは限らないためです (何らかの理由で保留中のコントロール/レコードセットの更新が常に存在する可能性があります)。その後、DSUM および関連機能を使用する可能性があります。

例:

dsum(Forms("Bill").recordsource, "unitPrice*lineQuantity")

もちろん、一時的なレコードセットを定義して請求書ごとの合計金額を取得するなど、より複雑なソリューションを使用することもできます。

Dim rs as DAO.recordset, _
    myBillNumber as variant, _
    myBillAmount as variant

set rs = currentDb.openRecordset(_ 
    "SELECT billNumber, sum(unitPrice*lineQuantity) as totalPrice FROM " & _
    Forms("Bill").recordset.name " GROUP BY billNumber")

myBillNumber = rs.fields(0)
myBillAmount = rs.fields(1)

一見難しそうに見えますが、慣れてしまえば迷わず使えますし、今のような悩みを抱えることもありません。

于 2008-11-10T12:04:16.610 に答える