• ベストアンサー

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% (296/460)
回答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