- ベストアンサー
Access2013 vbaサブフォームのレコードを選択する方法
- Access2013 vbaサブフォームのレコードをチェックボックスなどで選択する方法について教えてください。
- 選択したレコードのID番号を取得して、呼出元のフォームのIDフィールドに代入する方法についても教えてください。
- 質問者は、サブフォームのレコードを複数行選択できないようにしたいとのことです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
揚げ足とりの意図では無い旨、あらかじめお断りしたうえで。 > うまく行きません。 「どう」うまく行きませんか? 「コピペしたので補足の記述が一字ー句違わない」なら、 [MyID]と[optSelect]の間はカンマではなく ! であるべき。 NzでNull対策すれば、iifの条件式そのものが結果として欲しい値。 iifもthenの値、elseの値、それらを区切るカンマもカッコも不要です。 画面の流れではフォームが3つになりましたが、必要? 以下、AフォームのIDフィールドと内容が見える状態で進めて下さい。 > Aフォーム → 帳票型Bフォームで、レコードを選び「開く」ボタンを押す→ Bが子フォームですので、「レコードを選び」の段階で 親フォームであるAフォームのIDフィールドへ値が入りますか? 3つのフォームなら、親・子・孫です。代入のイベントをどこに書いてますか? 孫フォームでクリックしたoptSelectのIDが親フォームに届いてますか? まずはこれを確認してみて下さい。 #タブレットの手書き入力なのでしんどい。 #夕食の支度したら戻って来ます。
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
すみません。!の件は間違い。 一覧表サブフォームのoptSelectの値は [=Nz([親フォーム]![ID])=Nz([ID]) ] ←右辺はレコードセットのID
お礼
ご回答ありがとうございました。 そちらの回答を待っていましたが、色々と試してみてうまくいきました。 こちらのリンクにある「非連結のチェックボックスでレコードを選択する」というやり方を参考にして、ラジオボタンの処理が完成しました。↓ http://hatenachips.blog34.fc2.com/blog-entry-28.html
補足
ご回答ありがとうございます。 >一覧表サブフォームのoptSelectの値は >[=Nz([親フォーム]![ID])=Nz([ID]) ] ←右辺はレコードセットのID これは、コントロールソースに書き込むのですか? ・レコードセットのIDとは、私はこのBメインとCサブのフォームのCの選択したレコードのIDの事だと理解しましたが。 ・親フォームのTextBoxIDにセットしたいのです。 なんとかうまくしたいのですが、また、ラジオボタンの値がクリックしてもなにも代わりません。 どうかお知恵をよろしくお願いします。
- bin-chan
- ベストアンサー率33% (1403/4213)
チェックボックスは複数選択のためのもの。 単一選択なら、オプション(ラジオとも)ボタンを利用します。 でも結構面倒です。 メイン(以下「親」)フォームとサブ(以下「子」)フォーム間で テキストボックス参照と更新が必要。 子フォームでクリック行のID列値を親フォームのIDテキストボックスへ更新。 (方法は参考URLを参照して下さい) 子フォーム側は、レコードに定義されていないオプション列を設け、 値は自レコードのID列値と親フォームのIDテキストボックス値との比較結果とします。 比較により不一致ならFalseで「未選択」、一致ならTrueで「選択」になります。
補足
ご回答ありがとうございます。 チェックしたラジオボタンだけONにするというのは、恐らく、そのレコードソースに式を入れるのかと思い、以下のような式を入れてみましたが、うまく行きません。 「=IIf([Forms]![親フォーム]![txbSelectedID]=[MyID],[optSelect]=-1,[optSelect]=0)」 MyIDとは、子フォーム側のチェックを入れたところの主キーのIDです。 どのようにすれば良いでしょうか? よろしくお願いします。
補足
Aフォーム→ Bフォーム → BフォームとサブフォームC 1) Aフォームで同じレコードにあるcmdBtnを押すと、acDialogモードでBを開きます。 ※ここで、(1)のイベントPGは、中断 2) Bの帳票画面で、どのレコードに移動するか決めます。 →各レコードにある「選択」ボタンを押す →そのレコードのBのIDをグローバル変数にセット →イベントが走り、次のB+Cサブの一体型画面が開く 3)B+Cサブの BのForm_Load処理で →グローバル変数のBのIDを取得し →Me.RecordsetCloneで、該当のレコードをFindFirstして、NoMatch=Falseだったら、そのレコードに移動する 4) B+CのフォームのCのサブフォームの帳票で、ラジオボタンを押すと そのレコードのC帳票のIDをBのメインフォームのテキストボックスに格納 5) Bの選択ボタンを押すと、Bのテキストボックスに保存されたCのIDを取得して グローバル変数にセット 6) (2)の画面を閉じ、次に、(4)のB+Cのフォームを閉じる 7) (1)のcmdBtnイベント処理の中断したところから再開し AのフォームのIDフィールドに、グローバル変数のCのIDをセットして終わり です。 でも、これですね、何も選択しなかった場合の事をまだ考えてません。 でもでも、やはりラジオボタンがうまく動きません。。。