• ベストアンサー

Accessでチェックしたらサブフォームもチェック

T_マスタテーブル ・ID ・氏名 ・チェック T_サブテーブル ・ID ・住所 ・チェック となっていて、それぞれフォームを作成していて、 F_マスタフォームの中にF_サブフォームが入っています。 (IDでリンク) マスタテーブルに 1001  山田 太朗   というデータがあったとすると サブには 1001 東京都*** と入っているのですが、 サブは1人につき、1件とは限らず、 1001 東京都渋谷区*** 1001 東京都新宿区*** 1001 埼玉県さいたま市*** となっていることもあります。 F_マスタフォームのチェックの「更新後処理」に Private Sub チェック_AfterUpdate() If チェック = True Then [Form]![F_サブフォーム]![チェック] = True Else [Form]![F_サブフォーム]![チェック] = False End If End Sub と入っていて、F_マスタの方にチェックをすればF_サブのほうにもチェックが 入るようにしたいのですが、 1件目しかチェックがされません。 IDが同じもののチェックにはすべてチェックがされるようにするには どのようにかけばいいのでしょうか? 宜しくお願いします。 Ac2000です。

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

  • ベストアンサー
  • yoisho
  • ベストアンサー率64% (331/516)
回答No.4

>でも、サブテーブルから削除の部分ができません。 うーん・・・ ためしに簡単なデータをつくって試してみたところ、こちらでは削除ができたんですけど・・・ サブテーブルにマスタ以外のテーブルと一対多の参照整合があったりするとだめなのかなー? 理由は今のところよくわかりませんが、とりあえずサブクエリーを使った以下のコードではいかがでしょうか? (これならロックがかからないと思いますので、削除できるかもしれません。) DoCmd.RunSQL "DELETE * FROM T_サブテーブル WHERE ID In" _ & " (SELECT ID FROM T_マスタテーブル WHERE チェック=True;) " また何かありましたら、補足でコメント下さい。(土日は不在ですので、ご了承ください。)

KODAMAR
質問者

お礼

おはようございます。 教えていただいた方法で実行することができました! ありがとうございました! 長らくお付き合いいただいてありがとうございました。

その他の回答 (3)

  • yoisho
  • ベストアンサー率64% (331/516)
回答No.3

すみません、説明が足らなかったですね。(失礼いたしました。) 前の回答で例として挙げたのは、クエリーのSQLに記述するのではなく、VBAのコードとして記述する物になります。 DoCmd オブジェクト の RunSQL メソッド を使うと、VBA中でアクションクエリーと同じ処理を行うことができます。(つまり、別途アクションクエリーを増やさなくてもよいということです。詳しくは、それぞれのHELPを確認してみてください。) 具体的なVBAのコードとしては、「DoCmd.RunSQL "SQLステートメント"」 と記述します。 ここで、「SQLステートメント」は、クエリーのSQLビューの内容と同じものです。 (ですから、SQLの構文がよくわからなくても、まずアクションクエリーを作って、そのSQLビューをコピー&ペースト(ただし改行されているところは、半角スペースに置き換えること)してやればOKです。) なお、このSQLの部分は文字列として記述しなければなりませんので、両端に「"」が付いています。 (前回の回答で、そのさらに両端に「()」カッコが付いていましたが、これは不要でした(付いていても問題なく動きますが)ので、すみませんが消しておいてください。) また、~CStr(Me![チェック]) & " WHERE ID = " & CStr(Me![ID])) のように、CStr 関数でフォームコントロールのデータを文字列に変換していたのも、この理由によります。 なお、SQLステートメントは通常かなり長く(文字数が多く)なって、VBAのコードが読みにくくなりますので、スペースとアンダスコアの組み合わせ「 _」(詳しくは「表記規則」のHELPを確認してください)と、文字列結合演算子の「&」を利用して、複数行に分けて記述しています。 例を挙げると、 "INSERT" _ & " INTO" は、 "INSERT INTO" と同じ意味です。 注意ですが、INTO の前の半角スペースは必要で、これが無いと "INSERTINTO" になってしまいます。 余談ですが、複数行に分ける別の方法としては、文字列変数を利用して、 Dim str as String str = "INSERT" str = str & " INTO" str = str & CStr(○×△) str = str & " ・・・・・・・・ DoCmd.RunSQL str のようなやり方もあります。(こっちの方がスマートかな?) ということで、例えばマスタフォームにコマンドボタンを配置して、これをクリックした時にデータを移動するようなやり方なら、具体的なコードは以下のようになります。 Private Sub コマンド_Click() 'フォームのチェックボックスをチェックしただけでは、まだテーブルのデータは更新されていない(T_マスタテーブル の チェックフィールドの値 が True になっていない)ため、強制的に更新 DoCmd.RunCommand acCmdSaveRecord ' T_削除マスタテーブルに、データを追加 DoCmd.RunSQL "INSERT INTO T_削除マスタテーブル ( ID, 氏名 )" _ & " SELECT ID, 氏名 FROM T_マスタテーブル" _ & " WHERE T_マスタテーブル.チェック = True" ' T_削除サブテーブルに、データを追加 DoCmd.RunSQL "INSERT INTO T_削除サブテーブル ( ID, 住所 )" _ & " SELECT T_サブテーブル.ID, T_サブテーブル.住所" _ & " FROM T_マスタテーブル INNER JOIN T_サブテーブル" _ & " ON T_マスタテーブル.ID = T_サブテーブル.ID" _ & " WHERE T_マスタテーブル.チェック = True" ' T_サブテーブルのデータを削除(マスタテーブルと連鎖削除されるなら、不要か?) DoCmd.RunSQL "DELETE T_サブテーブル.*" _ & " FROM T_サブテーブル INNER JOIN T_マスタテーブル" _ & " ON T_サブテーブル.ID = T_マスタテーブル.ID" _ & " WHERE T_マスタテーブル.チェック = True" ' T_マスタテーブルのデータを削除(これを最後に行わないと、どのレコードを移動・削除すればいいのかわからなくなってしまいます。) DoCmd.RunSQL "DELETE * FROM T_マスタテーブル" _ & " WHERE チェック = True" ' T_マスタテーブル のレコードが削除されたため、(マスタフォームに表示するデータが無くなると、連結テキストボックスやチェックボックス等にエラー表示が出てしまうので、)フォームを再クエリー Me.Requery End Sub 私はかなり自己流で Access やってますので、本当はもっと良いやり方があるのかもしれませんけど、とりあえず一例としてご参考まで。 コードの不具合(ちゃんとデバッグしてませんので、どこかにミスがあってそのままでは動かない可能性があります。)や、その他疑問等ありましたら、また補足でご連絡願います。 (土日は不在ですので、お答えが遅れてしまうかもしれませんことをあらかじめご了承ください。)

KODAMAR
質問者

お礼

すいません、下記標記に誤りがあって修正したらできました。 でも、サブテーブルから削除の部分が 「指定されたテーブルから削除できませんでした。」 と出て、できません。 (マスタテーブルから削除はできました。) 宜しくお願いします。

KODAMAR
質問者

補足

再度回答ありがとうございます。 教えていただいた通りにコードをかいてみました。 -------------------- Private Sub コマンド8_Click() DoCmd.RunCommand acCmdSaveRecord 'T_削除マスタテーブルにデータを追加 DoCmd.RunSQL "INSERT into T_削除マスタテーブル (ID,氏名)" _ & " SELECT ID, 氏名 FROM T_マスタテーブル" _ & " WHERE T_マスタテーブル.チェック = True" 'T_削除サブテーブルに、データを追加 DoCmd.RunSQL "INSERT INTO T_削除サブテーブル (ID, 住所)" _ & " FROM T_サブテーブル.ID, T_サブテーブル.住所" _ & " FROM T_マスタテーブル INNER JOIN T_サブテーブル" _ & " ON T_マスタテーブル.ID = T_サブテーブル.ID" _ & " WHERE T_マスタテーブル.チェック = True" 'T_サブテーブルのデータを削除 DoCmd.RunSQL "DELETE T_サブテーブル.*" _ & " FROM T_サブテーブル INNER JOIN T_マスタテーブル" _ & " ON T_サブテーブル.ID = T_マスタテーブル.ID" _ & " WHERE T_マスタテーブル.チェック = True" 'マスタテーブルのデータを削除 DoCmd.RunSQL "DELETE * FROM T_マスタテーブル" _ & " WHERE チェック = True" 'マスタテーブルのデータが削除されたあとのエラー表示回避 Me.Requery End Sub -------------------- としたんですが、 T_削除マスタテーブルへの追加はスムーズに行われているようで、 きちんと処理が正常にできましたが、 その次のところでエラーらしく、 -------------------- 実行時エラー '3134'; INSERT INTO ステートメントの構文エラーです。 -------------------- とでてしまいます。 これはどのようにしたらいいのでしょうか? 再度回答していただけるとありがたいです。 宜しくお願いします。

  • yoisho
  • ベストアンサー率64% (331/516)
回答No.2

まず、ご質問への回答ですが、 フォーム上の連結コントロールの値は、カレントレコードについてしか操作できませんので、サブフォームの1件目にしかチェックが入らないのは、仕方ないことです。 (ためしに、サブフォームの2件目にフォーカスを移動してからメインフォームにチェックを入れれば、サブの2件目にチェックが入るのがわかると思います。) ご希望のことをするには、アクション(更新)クエリーでも使って、[T_サブテーブル]のデータを直接書き換えてしまうのが簡単だと思います。 (多少画面のレスポンスは悪くなりますが、GotoRecordでサブフォームのカレントレコードを順番に移動して全てを処理するよりは、ずっとシンプルです。) 具体的には、以下のようにすればできると思います。 Private Sub チェック_AfterUpdate() DoCmd.RunSQL ("UPDATE T_サブテーブル SET チェック = " & _ CStr(Me![チェック]) & " WHERE ID = " & CStr(Me![ID])) Me![F_サブフォーム]. Refresh End Sub さて確認ですが、KODAMARさんのなさりたいことは、以下でよろしいのでしょうか。 (もし、私の勘違いがありましたらお許しください。) ○[T_マスタテーブル]から、マスターフォームでチェックをしたレコードの“ID”、“氏名”のデータを[T_削除マスタテーブル]へ移動する。 ○さらに、[T_サブテーブル]から、対応する ID のレコードの“ID”、“住所”のデータを[T_削除サブテーブル]へ移動する。 以上で間違いなければ、元のテーブルのチェックフィールドは全て False、削除テーブルは全て True となりますので、いずれのテーブルのチェックフィールドも最終的には必要ないように思います。 (移動処理のために[T_マスタテーブル]のチェックを一時的に利用するなら、これはあっても良いかもしれませんが、(tatezooさんと同じ意見ですが、)少なくとも[T_サブテーブル]のチェックは不要では?) 例えば[T_削除サブテーブル]への追加でしたら、[T_サブテーブル]にチェックフィールドがなくでも、以下の追加クエリー(SQLステートメント)で可能です。 DoCmd.RunSQL ("INSERT INTO T_削除サブテーブル ( ID, 住所 )” & _ “ SELECT T_サブテーブル.ID, T_サブテーブル.住所” & _ “ FROM T_マスタテーブル INNER JOIN T_サブテーブル” & _ “ ON T_マスタテーブル.ID = T_サブテーブル.ID” & _ “ WHERE チェック = True”) 私の勘違いやSQLの疑問などがありましたら、補足でコメントをお願いします。

KODAMAR
質問者

お礼

>○[T_マスタテーブル]から、マスターフォームでチェックをしたレコードの“ID”、“氏名”のデータを[T_削除マスタテーブル]へ移動する。 >○さらに、[T_サブテーブル]から、対応する ID のレコードの“ID”、“住所”のデータを[T_削除サブテーブル]へ移動する。 はい、その通りです! それをやりたいんです。 DoCmd.RunSQL ("INSERT INTO T_削除サブテーブル ( ID, 住所 )” & _ “ SELECT T_サブテーブル.ID, T_サブテーブル.住所” & _ “ FROM T_マスタテーブル INNER JOIN T_サブテーブル” & _ “ ON T_マスタテーブル.ID = T_サブテーブル.ID” & _ “ WHERE チェック = True”) これは追加クエリーの SQLビューで入力すればいいんですか? (間違ってたらごめんなさい。) すると「SQLステートメントが正しくありません」ってでてしまうんですが。。。 宜しくお願いします。

  • tatezoo
  • ベストアンサー率43% (7/16)
回答No.1

提示されたソースですと、マスターテーブルのチェックに完全連動させるように伺えますがそれでよろしいのでしょうか? であれば、サブテーブルにチェックを入れる必要性が無いのではないでしょうか。 サブフォームにマスターフォームのチェックを貼り付ければ良いのではないでしょうか? サブフォームのチェックのコントロールソースに=[Forms]![F_マスタフォーム]![チェック]とすればよいのではないでしょうか? 違っていたら、スイマセン。

KODAMAR
質問者

お礼

もうひとつ追加です。 T_マスタテーブル、T_サブテーブルともに、チェックが入ったものを クエリを利用してT_削除マスタテーブル、T_削除サブテーブルに追加し、 それから削除したいのです。 ですので、リレーションシップを使っての、連鎖削除だと、 T_マスタテーブルの方は追加・削除ともに成功しますが、 T_サブテーブルの方が追加しないまま削除してしまうので、 この方法も的確ではないようなのです。 よいお知恵ありましたらよろしくお願いします。

KODAMAR
質問者

補足

回答ありがとうございます。 >サブフォームのチェックのコントロールソースに=[Forms]![F_マスタフォーム]![チェック]とすればよいのではないでしょうか? これ、私もやってみたりしたのですが、これですと、フォーム上はチェックが入るんですが、テーブルの実際のデータはかわってないんです。 このチェックをもとにいろいろ操作をしたいので、テーブルの方にチェックが 入らないと。。。 #クエリ使えばたぶんできますよね。 #最終手段はクエリを使おうと思ってるんですけど、 #できればテーブルとフォームで済ませたいと思ったりしてます。 #でないとクエリがたくさんになってややこしくなってしまうので。。。

関連するQ&A

  • サブフォームで自動採番

    お世話になります。ACCESS2000で制作しています 主テーブル(マスタ)に顧客コード(主キー)、 サブテーブル(トラン)に顧客コードと枝番 というフィールドがあります。 顧客コードでリレーションシップを結んでいます。 それぞれのテーブルからクエリを経てフォームをつくり (Q_マスタ→F_マスタ、Q_トラン→F_トラン) また、検索フォームも別に作っています。 F_トランはF_マスタに埋め込んでいます。 検索フォームで検索して該当するデータが無い場合 DoCmd.OpenForm "F_マスタ", , , , acFormAdd で新規フォームを呼び出します。 このときサブフォームの枝番に自動的に「1」を入れたいのですが (開く時でも読み込み時でもいつでもいいのですが) どうしたら良いのでしょうか? ちなみに今は サブフォームのプロシージャで Private Sub Form_Open(Cancel As Integer)  If Me.NewRecord Then   Me![枝番] = 1  Else   Me![枝番] = DMax("枝番", "Q_トラン") + 1  End If End Sub としています。 こうするとQ_マスタの一番上のデータが 例えばQ_トランレコードを2つ持っていると 「3」と出てしまいます。 どのようにすればいいのでしょうか。 よろしくお願いします。

  • 【Access】サブフォーム間のカーソル移動がわからなくて困っています。

    2つのサブフォームがあり、サブフォーム間のカーソル移動を実現したいのですが、 意図した動作にならず、困っております。 その為、下記の条件を満たす動作をご教示いただける方がいらっしゃいましたら、 ご教示の程、よろしくお願いします。 【条件】 1. Form1_SUBのfield2でEnterキー押下時、同じ行のForm2_SUBのIDに移動したいです (Form1_SUBの1行目のfield2でEnterキー押下時、 Form2_SUBの1行目のIDにカーソルを移動したいです。 下記のソースでは Form2_SUBの最後のカーソル位置があった行のIDに遷移してしまいます)。 2. Form2_SUBのfield2でEnterキー押下時、次の行のForm1_SUBのIDに移動したいです (Form2_SUBの1行目のfield2でEnterキー押下時、 Form1_SUBの2行目のIDにカーソルを移動したいです。 下記のソースでは Form1_SUBの最後のカーソル位置があった行のIDに遷移してしまいます)。 【フォーム名】 親:OYAFORM サブ:Form1_SUB(T1テーブルを連結した帳票フォームです。) サブ:Form2_SUB(T2テーブルを連結した帳票フォームです。) 【テーブル名】 T1(ID, field1, field2) T2(ID, field1, field2) 【F1_SUBのソース】 Private Sub field2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Forms!OYAFORM!Form2_SUB.SetFocus Forms!OYAFORM!Form2_SUB.Form!ID.SetFocus End If End Sub 【F2_SUBのソース】 Private Sub field2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Forms!OYAFORM!Form1_SUB.SetFocus Forms!OYAFORM!Form1_SUB.Form!ID.SetFocus End If End Sub 以上、よろしくお願いします。

  • サブフォームのビューを切り替えたい

    親フォーム(フォーム1)にサブフォームとして、 テーブルをソースとするサブフォーム(テーブル1のサブフォーム)を配置しました。 親フォームからサブフォームのビューを変更したいのですが どうすればいいか教えてください。 親フォームのコマンドボタンにはそれぞれ Private Sub 単票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 1 '帳票フォーム End Sub Private Sub 帳票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 0 '単票フォーム End Sub としたのですが、 実行すると 実行時エラー 2136 "このプロパティを設定するには、フォームまたはレポートをデザインビューで開きます"。 となってしまいます。 Private Sub 帳票フォームへ切り替え_Click() DoCmd.SelectObject acForm, "テーブル1のサブフォーム" DoCmd.RunCommand acCmdFormView End Sub にしたところ、 実行時エラー 2489 “オブジェクト テーブル1が開いていません、” になります。 サブフォームに埋め込んでいて親フォームを開いていても 開いてない事になるのですね。 フォームビューの時に、切り替える事は不可能なのでしょうか? 帳票ビュー表示用フォーム、 単票ビュー表示用フォーム を作るしかないのでしょうか?

  • AccessVBAでサブフォームの値チェック

    こんにちは。前々回http://okwave.jp/qa/q6556906.htmlにて 質問させて頂いたサブフォームの値チェックをする際のVBAの記述で 教えて頂きたい事ができましたので、質問させて頂きます。 Accessのバージョンは2003です。 以下のようなVBAを記述しているのですが、一度VBAでの処理を実行すると フォームを一度閉じてから再度フォームを開くと該当フィールドの色が 元に戻らず黄色又はマゼンダのままとなってしまっています… 別のAccessにて動作確認した際は、再度フォームを開いてもフィールドの 色は元のままだったのですが… どこが原因なのか教えていただければ幸いです。 長文で見辛いですが宜しくお願いします。 Dim stDocName As String Dim stLinkCriteria As String 'フォーム上のコントロールを格納する変数 Dim ctrl As Control Dim msg As String 'フォーム上のすべてのコントロールに対しての繰り返し処理 For Each ctrl In Me.Controls '取得したコントロールがテキストボックスかどうか If ctrl.ControlType = acTextBox Then 'Aの値が15.5未満の場合 If Forms![F_親フォーム].[F_サブフォーム].Form.[A] <= 15.5 Then '背景をピンクに Forms![F_親フォーム].[F_サブフォーム].Form.[A].BackColor = vbMagenta Else '背景を黄色に Forms![F_親フォーム].[F_サブフォーム].Form.[A].BackColor = vbYellow End If 'Bの値が45未満の場合 If Forms![F_親フォーム].[F_サブフォーム].Form.[B] <= 45 Then '背景をピンクに Forms![F_親フォーム].[F_サブフォーム].Form.[B].BackColor = vbMagenta Else '背景を黄色に Forms![F_親フォーム].[F_サブフォーム].Form.[B].BackColor = vbYellow End If End If Next ctrl Me.Undo 'フォーム上のすべてのコントロールに対しての繰り返し処理 For Each ctrl In Forms![F_親フォーム].[F_サブフォーム].Form.Controls 'テキストボックスのコントロールを取得 If TypeOf ctrl Is TextBox Then '取得したコントロールが黄色だった場合 If ctrl.BackColor = vbYellow Then 'msgにテキストボックスの名前を追加 msg = msg & ctrl.Name & vbCrLf 'メッセージボックスに名前を表示 End If End If Next ctrl 'msgが空白じゃない場合 If msg <> "" Then 'メッセージボックスを表示 MsgBox msg Else 'ctrl.BackColor = vbWhite stDocName = "F_フォーム1" DoCmd.Close acForm, Me.Name DoCmd.OpenForm stDocName End If Exit_閉じる_Click: Exit Sub Err_閉じる_Click: MsgBox Err.Description Resume Exit_閉じる_Click End Sub

  • アクセスのサブフォーム

    よろしく、お願いします。 アクセスのサブフォームをVBAでテーブルに登録する方法を教えてください。 フォームからメインテーブルとサブテーブルへ、ボタン一つで同時に登録したいのです。 よろしく、お願いします。

  • サブフォームにフィルタをかけたい

    サブフォームにフィルタをかけたいのですが エラーになってしまいます。 下記がエラー内容です。 ---------------------------------------------------------- 実行時エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ---------------------------------------------------------- 細かい概要は テーブル1にフィールドがあり、 レコードには「あああ」と入力されています。 テーブル1がレコードソースとされている「フォーム(2)」をサブフォームとして 親フォーム(フォーム名:フォーム(1))に乗せました。 フォーム(1)を開いた時にフォーム(2)にフィルタをかけたいのですが うまくいきません。 オブジェクト名にカッコを付けているため、 Form_フォーム・・・・ というコードは書けないので ---------------------------------------------------------- Private Sub Form_Open(Cancel As Integer) Forms("フォーム(1)").Controls("フォーム(2)").Form.Filter = "フィールド = '" & "*あ*" & "'" Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True End Sub ---------------------------------------------------------- としています。 Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True でエラーになりますが、 この行をなくしたら、フィルタがかかりません。 どうすればサブフォームにフィルタをかける事が出来るのでしょうか? ご教示よろしくお願い致します。

  • ACCESSで条件によってサブフォームを非表示に

    Accessの初心者です。よろしくお願いします。 Accessで住所録を作っています。 メインフォームは主に本人のデータを表示し、サブフォームで家族の データを表示するようにしました。 その時、家族がいない人についてはサブフォーム自体を表示しないようにしたいと思います。 そこで下記のようにしましたがうまくいきませんでした。 (1)サブフォーム内で家族の人数をカウントする。 (2)このカウント結果をメインフォームに表示する。(メインフォーム にテキストボックスを配置し、コントロールソースをサブフォームの 人数カウントにする。)     ここまではうまくいきました。 (3)ここでメインフォームのイベントの「開くとき」に以下のように記 述しました。(メインフォームのテキストボックスにカウントという  名前をつけました。) Private Sub Form_Open(Cancel As Integer) If Me!カウント = 0 Then サブフォーム.Visible = False Else サブフォーム.Visible = True End If End Sub この記述の仕方がまずいと思うのですが、どのようにすればよいか 分りません。よろしくお願いします。

  • サブフォームをリクエリしたい

    メインフォームのコマンドボタンを押下するとvbaを使ってテーブルのデータを更新します。 メインフォームの中にはサブフォームがあり、 そのサブフォームとテーブルがリンクしています。 サブフォームにはテーブルのデータが表示されており、 メインフォームのコマンドボタン押下→テーブルデータ更新 がされると、全て#Deletedという文字が表示されます。 なので、 Private Sub cmd_データ更新_Click() Call データ更新 Me.Controls("Fサブ").Form.Requery End Sub としたのですが、 「実行時エラー’2465’:指定した式で参照されている’Fサブ’フィールドが見つかりません。」 が発生します。 Me.Controls("Fサブ").Requery これにしても同じでした。

  • 【Access】サブフォームの項目選択時、対応するコントロールの有効無効を制御する方法

    サブフォーム内にテーブル名tblのデータを帳票フォームで連結し、 サブフォーム内のチェックボックスをクリックすると、 対応するコンボボックスの有効無効を制御したい (ID=1のチェックボックスクリック時、ID=1のコンボボックスの有効無効を制御)と思いましたが、 どのチェックボックスをクリックしても、 ID=0~ID=2のすべてのコンボボックスが有効になったり、無効になったりしてしまいました。 【テーブル名:tbl】 ID, checkbox, combobox 0, false, A 1, true, B 2, false, C 【サブフォーム名のチェックボックスのクリックイベント】 Private Sub checkbox_Click() If Me.checkbox = True Then Me.combobox.Enabled = True Else Me.combobox.Enabled = False End If End Sub 何かしら添え字を渡す事ができれば、対応できるのではと思いましたが、 どのように記述すればよいか分かりませんでした。 その為、上記のような場合、個別で制御する方法をご存知の方がいらっしゃいましたら、 ご教示いただければと思います。 よろしくお願いします。

  • 親フォームからサブフォームのレコードソースを設定

    親フォームからサブフォームのレコードソースを設定するには? フォーム1にテーブル1をドロップアンドドラッグして、「テーブル1のサブフォーム」を作成しました。 フォーム1にあるコマンドボタンから「テーブル1のサブフォーム」のRecordSourceを設定する方法を教えてください。 「テーブル1のサブフォーム」からなら Private Sub Form_Load() Me.RecordSource = "" End Sub とできるのですが、 やりたいことはフォーム1からのイベントなので 「テーブル1のサブフォーム」からのイベントは使えません。 だからってフォーム1の Private Sub コマンド2_Click() Me.テーブル1のサブフォーム.RecordSource = "テーブル1のサブフォーム" End Sub とするとコンパイルエラーになります。 良い方法があれば教えてください。アドバイスよろしくお願いします。

専門家に質問してみよう