いちばん失敗した人決定戦

[Access2013 vba]
■したいこと
サブフォームのレコードの中から、一レコードだけをチェックボックスなどで選択したいのですが、どのようにしたら出来ますでしょうか。
複数行選択は出来ないようにしたいです。
選択したのち、メインフォームの選択ボタンを押すと、そのレコードのID番号を取得して、呼出元のフォームのIDフィールドに代入したいです。

■画面の流れ・・・
Aフォーム → 帳票型Bフォームで、レコードを選び「開く」ボタンを押す→
B 'メインフォームとCサブフォーム)が開く
Cサブフォームのレコードをチェックボックスにチェックを入れて選択する
B ' メインフォームの「選択」ボタンを押すと B ' メインフォームと、その前のBフォームが閉じて
Aフォームに戻り、AフォームのIDフィールドに選択したIDが格納される。

よろしくお願いします。

A 回答 (3件)

揚げ足とりの意図では無い旨、あらかじめお断りしたうえで。



> うまく行きません。
「どう」うまく行きませんか?
「コピペしたので補足の記述が一字ー句違わない」なら、
[MyID]と[optSelect]の間はカンマではなく ! であるべき。

NzでNull対策すれば、iifの条件式そのものが結果として欲しい値。
iifもthenの値、elseの値、それらを区切るカンマもカッコも不要です。


画面の流れではフォームが3つになりましたが、必要?
以下、AフォームのIDフィールドと内容が見える状態で進めて下さい。

> Aフォーム → 帳票型Bフォームで、レコードを選び「開く」ボタンを押す→
Bが子フォームですので、「レコードを選び」の段階で
親フォームであるAフォームのIDフィールドへ値が入りますか?
3つのフォームなら、親・子・孫です。代入のイベントをどこに書いてますか?
孫フォームでクリックしたoptSelectの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をセットして終わり

です。

でも、これですね、何も選択しなかった場合の事をまだ考えてません。

でもでも、やはりラジオボタンがうまく動きません。。。

補足日時:2014/12/14 23:14
    • good
    • 0

すみません。

!の件は間違い。

一覧表サブフォームのoptSelectの値は
[=Nz([親フォーム]![ID])=Nz([ID]) ] ←右辺はレコードセットのID

この回答への補足

ご回答ありがとうございます。

>一覧表サブフォームのoptSelectの値は
>[=Nz([親フォーム]![ID])=Nz([ID]) ] ←右辺はレコードセットのID

これは、コントロールソースに書き込むのですか?
・レコードセットのIDとは、私はこのBメインとCサブのフォームのCの選択したレコードのIDの事だと理解しましたが。
・親フォームのTextBoxIDにセットしたいのです。

なんとかうまくしたいのですが、また、ラジオボタンの値がクリックしてもなにも代わりません。

どうかお知恵をよろしくお願いします。

補足日時:2014/12/14 23:20
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

そちらの回答を待っていましたが、色々と試してみてうまくいきました。

こちらのリンクにある「非連結のチェックボックスでレコードを選択する」というやり方を参考にして、ラジオボタンの処理が完成しました。↓
http://hatenachips.blog34.fc2.com/blog-entry-28. …

お礼日時:2014/12/15 16:11

チェックボックスは複数選択のためのもの。


単一選択なら、オプション(ラジオとも)ボタンを利用します。

でも結構面倒です。
メイン(以下「親」)フォームとサブ(以下「子」)フォーム間で
テキストボックス参照と更新が必要。

子フォームでクリック行のID列値を親フォームのIDテキストボックスへ更新。
(方法は参考URLを参照して下さい)

子フォーム側は、レコードに定義されていないオプション列を設け、
値は自レコードのID列値と親フォームのIDテキストボックス値との比較結果とします。
比較により不一致ならFalseで「未選択」、一致ならTrueで「選択」になります。

参考URL:http://www.happy2-island.com/access/gogo03/capte …

この回答への補足

ご回答ありがとうございます。
チェックしたラジオボタンだけONにするというのは、恐らく、そのレコードソースに式を入れるのかと思い、以下のような式を入れてみましたが、うまく行きません。
「=IIf([Forms]![親フォーム]![txbSelectedID]=[MyID],[optSelect]=-1,[optSelect]=0)」

MyIDとは、子フォーム側のチェックを入れたところの主キーのIDです。

どのようにすれば良いでしょうか?

よろしくお願いします。

補足日時:2014/12/14 15:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す