• ベストアンサー

MS ACCESSテキストボックスの値のリンク

みなさんこんにちは! MS ACCESSで、フォームを作成いたしました。 そのフォームにはサブフォームが挿入されており、サブフォーム側で入力した値の合計を計算するテキストボックスを作りました。そしてその合計の値を、メインフォームに設けたテキストボックスに反映させたいのですが、なかなかうまく行きません・・・どうしたら値が反映するようにできるでしょうか? 初心者な者で質問ないようが分かりにくいかと思います。不足等ございましたら教えていただけると幸いです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

VBAやAccessを扱うのは1996年が最後。そういうことで、ちょっと苦労したが何とかできた。 これって、確か、相当に悩んだ案件です。下手に主表のテキストボックスに合計値を書き込めば、カーソルは次の行へは移動しませんから・・・。 で、悩みに悩んだ挙句、SQL文を発行してテーブルの合計値を書き換えて、やーっと成功したもんです。 Private Sub Form_AfterUpdate()   Dim curGokei As Currency   Dim strSQL1 As String   Dim strSQL2 As String   DoCmd.SetWarnings False strSQL1 = "SELECT SUM(売上金額) FROM 売上伝票明細 " & _        "WHERE 売上伝票_ID=" & 売上伝票_ID   strSQL2 = "UPDATE 売上伝票 SET 売上金額合計= [xxxxx] " & _ " WHERE id=" & Me.売上伝票_ID   curGokei = DBLookup(strSQL1, 0)   DoCmd.RunSQL Replace(strSQL, "[xxxxx]", curGokei)   DoCmd.SetWarnings True End Sub 添付図の主表の合計欄は、こうして書き換えています。 ※curGokei = DBLookup(strSQL1, 0) DBLookup()は、自作関数なので置き換えて下さい。

shangshanrushui
質問者

お礼

f_a_007 様 こんにちは!お礼が遅くなってしまい、申し訳ございません。 今から教えていただいた方法を試してみようとおもいます。 1番にご回答いただいたので、ベストアンサーにさせていただきます。 ありがとうございました^^

その他の回答 (2)

  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.3

表示するだけで、保存の必要はないものとして メインフォームのテキストボックスのコントロールソースを =[サブフォームコントロール名]![合計のテキストボックス名] としてください。 念のためこちらも。 サブフォームとサブフォームコントロールの違いとは? http://hatenachips.blog34.fc2.com/blog-entry-347.html

shangshanrushui
質問者

お礼

m3_maki 様 こんにちは!お礼が遅くなってしまって申し訳ありません。 回答と併せて役に立つurlを紹介していただいて、ありがとうございました^^

回答No.2

【訂正】 × DoCmd.RunSQL Replace(strSQL, "[xxxxx]", curGokei) 〇 DoCmd.RunSQL Replace(strSQL2, "[xxxxx]", curGokei) テストしてコピペした筈だったが、ミスってました。 PS、訂正のついでに・・・ Access の DLookup() や DSum() って、結構、実行が遅い。そこで、私は、次の DBLookup() を使っています。SQL文をそのまま書けるので非常に重宝。そこの部分の置換に手間取ってもと思って紹介しておきます。仮に、利用される場合は、標準モジュールにコピペしてください。 Public Function DBLookup(ByVal strQuerySQL As String, _              Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup    Dim DataValue    Dim rst     As ADODB.Recordset    Set rst = New ADODB.Recordset    With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then        .MoveFirst        DataValue = .Fields(0)      End If    End With Exit_DBLookup: On Error Resume Next    rst.Close    Set rst = Nothing    DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)    Exit Function Err_DBLookup:    MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"    Resume Exit_DBLookup End Function

shangshanrushui
質問者

お礼

f_a_007様 NO.1のANSWERにお礼をして、こちらにお礼をするのを失念しておりました;; 申し訳ありません。 訂正の上、詳しく追加で解説までしていただき、ありがとうございました^^

関連するQ&A

  • フォームの値をレポートに反映させるには

    お世話になります。 Access2002のフォームとレポートについてご教授ください。 それは、サブフォームをデータシートにしてサブフォームの中の計算の合計をメインフォームのテキストボックスに反映させるために、=Form![サブフォーム名]![合計]として、サブフォームのヘッダーに一時値を待機させといて、その合計値(サブフォームの合計値)をメインフォームに反映させています。(サブフォームの合計値も計算式をコントロールソースに入力:[単価]*[数量]) そして、メインフォームの値をレポートに反映させて印刷をかけたいのですが、どの様にしたらいいのかわかりません。。。 何かいい方法がございましたら、ひとつよろしくお願いいたします。

  • サブフォームにあるテキストボックスの値を参照したい

    ACCESS2010です。 サブフォーム(帳票フォーム)のフッターにある、コントロールソースが =nz(sum([金額]),0) と設定してあるテキストボックスがあります。([合計金額s]) この[合計金額s]の値を、メインフォームのコントロールソースがテーブルの項目に設定されているテキストボックス([金額])で参照したいのですが、金額入力直後の値が参照できません。 現在はメインフォームに中継用のテキストボックス([金額wk])を作成し、コントロールソースを[合計金額s]に設定、acNewRecする前に[金額wk]の値を[金額]へ渡しています。 何とか直接参照する方法はありませんでしょうか。

  • Access 連結テキストボックスのフィルタ操作を非連結テキストボック

    Access 連結テキストボックスのフィルタ操作を非連結テキストボックスから操作 したいのですが、うまく出来ません。 使用しているのはAccess2007です。 フォームはウィザード使用によるメインフォームとサブフォームです。 構造は下記の通りになります。 ======================================== -メインフォーム-  ID □□□□←(連結テキストボックス、テーブル[IDコード](IDコード(オートナンバー)、名前(テキスト))     ↑ (フィルタ操作を(指定の値に等しい)で非連結テキストボックスの数値を反映させたい。)                   非連結テキストボックス□□□□                      (数値記入してエンターを押すとフィルタ操作実行) ---------------------------------------------------------------------- -サブフォーム-  [ 名前 ]←メインフォームの連結テキストボックスと連動する。 [___][____][____]  [___][____][____] =========================================      使用目的:メインフォームでID検索し、サブフォームで新規登録。 ネットや本をあさっていろいろ試してみたのですが、 非連結テキストボックスの数値がそのまま連結テキストボックス(IDフィールド)に反映されません。 違った数値がでたりしてどうにもなりませんでした。 どうすれば実現可能なのかとても知りたいです。 どうかよろしくお願いします。

  • ACCESSフォームのテキストボックスで指定と違うフォントで表示される

    Windows2000+ACCESS2000です。 ACCESSのフォームでテキストボックスのフォントを「MSゴシック」に設定しているにもかかわらず、実行すると「MSPゴシック」として表示されてしまいます。 このフォームは別のフォームのサブフォームなのですが、サブフォームを単体で実行しても、メインフォーム内のサブフォームとして実行しても、「MSPゴシック」で表示されてしまいます。 このときメインフォーム内で「MSゴシック」に設定しているところはちゃんと「MSゴシック」で表示されています。 原因と対処方法がわかる方、いらっしゃいますでしょうか。

  • Accessのサブフォームについて

    Accessのサブフォームのテキストボックスをクリックするとメインフォームのテキストボックスにサブフォームのテキストボックスの値を反映させるために以下のロジックを組み込んだ所エラーが発生してしまいました。 調べてみても分かりませんでしたので解決方法が分かる方は教えて下さい。 よろしくお願いします。 ロジック Form!メインフォーム!テキストボックス=サブフォームのテキストボックス エラー 「指定した式で参照されている’メインフォーム’フィールドが見つかりません」 「コントロールがフォーカスを取得していないときに、コントロールのプロパティまたはメソッドを参照することはできません」

  • ACCESS メインFからサブFの値を参照

    サブフォームで集計した値をメインフォームで演算値として使用したいのですができません。 サブフォームのフォームヘッダに集計値を入れるテキストボックスを配置し、メインフォームにサブフォームの集計値を参照するテキストボックスを配置しています。 ほんとうはイベントの実行で直接サブフォームの集計値を使った演算を行いたいのですが出来ないのでメインフォームにテキストボックスを作成しました。 サブフォームの集計値は表示しますが、その値を演算値として使用できないのです。試しにMsgboxでメインフォームのテキストボックスの値を表示させると何も表示しません。 なぜメインフォームのテキストボックスにサブフォームの値は表示できるのにその値を使用できないのでしょうか? 具体的には次の通りです。 <サブフォームに配置したテキストボックス>  名前        :テキスト16  コントロールソース:SUM([枚数〕)  書式        :数値 <メインフォームに配置したテキストボックス>  名前        :テキスト130  コントロールソース:[Foms]![メインフォーム名]![サブフォーム名].Form!テキスト16  書式        :数値 <イベント>   MSGBOX テキスト130       ※何も表示されません!

  • MS Accessのフォームについて

    Access2010についてお教えください。 添付の画像のように「テストメインフォーム」があります。 フォームには「テストサブフォーム」というサブフォームが配置されています。 画像はないですが、「テストレポート」というレポートもあります。 やりたい事。 テキストボックス(テスト1の値)に文字列を入力し、印刷ボタンを押す。 テキストボックスに入力された値をキーに「テストレポート」にデータが渡され、プレビュー表示。 「テスト5」のチェックボックスをONにする。 添付画像では、テキストボックスに入力された値が003のため、サブフォームの テスト1の値が003の行のテスト5のチェックボックスをONにする。 以上の事を実現できる方法をお教え頂けませんでしょうか。 DoCmd.OpenReport "テストレポート, acViewPreview, , "テスト1 = '" & txt_inputID & "'" とやったら、クエリパラメータみたいになり、テキストボックスの値を直接見るといったことが できませんでした・・・

  • サブフォームのテキストボックスにフォーカスを戻す

    Access2010です。 メインフォームにいくつかのテキストボックスやコンボボックスと「登録」ボタンがあり、メインフォームの中には帳票形式のサブフォームがあります。 サブフォームには ・数量 ・単価 ・金額 のテキストボックスがあります。 フォーカスがサブフォームのいずれかのテキストボックスにある状態で、「登録」ボタンをクリックするとYES/NOボタンがある確認画面が表示されます。 そこでNOを選択した場合に、直前までフォーカスがあったサブフォームのテキストボックスへフォーカスを戻すにはどうしたら良いでしょうか?

  • Accessのサブフォームから値を参照する方法について

    いつも拝見させて頂いております。 現在、Access97のフォームに以下のようなコントロールを配置しています。 1.フォームにサブフォームAを配置  1-1.サブフォームAにテキストボックスAを配置(入力用) 2.フォームにサブフォームBを配置  2-1.サブフォームBにテキストボックスBを配置(表示用) ※フォームは一つです。 <実現したい事> サブフォームA内のテキストボックスAの値をサブフォームB内の テキストボックスBに表示したいのですが、なかなかうまくいきません。 サブフォームA内のテキストボックスAの値を変更するとサブフォームB内の テキストボックスBも変更するようにしたいので、テキストボックスBの ControlSourceに[Form]![フォーム]![サブフォームA].[Form]![テキストボックスA] としましたが実現できませんでした。 どのような方法をとれば実現できるでしょうか? 宜しくお願いします。

  • アクセスのサブフォームでのトラブル

    サブフォームにコンボボックスがあります。値集合ソースにクエリを指定しており、クエリの抽出条件でメインフォームのリストボックスの値を参照しています。 ところがなぜか、メインフォームのリストボックスを変更しても、それがサブフォームのコンボボックスに反映されません。どういうわけか、変更する前の値が反映されてしまいます。 ところがデータベースウィンドウからそのサブフォームを開くと、同じコンボボックスにメインフォームの変更がちゃんと反映されています。 メインフォームのリストボックスの更新後処理イベントでサブフォームのコンボボックスのリクエリを実行しています。 原因が分からず困っています。よろしくお願いします。

専門家に質問してみよう