Access2013 vbaサブフォームのレコードを選択する方法

このQ&Aのポイント
  • Access2013 vbaサブフォームのレコードをチェックボックスなどで選択する方法について教えてください。
  • 選択したレコードのID番号を取得して、呼出元のフォームのIDフィールドに代入する方法についても教えてください。
  • 質問者は、サブフォームのレコードを複数行選択できないようにしたいとのことです。
回答を見る
  • ベストアンサー

Access2013 vbaサブフォームのレコード

[Access2013 vba] ■したいこと サブフォームのレコードの中から、一レコードだけをチェックボックスなどで選択したいのですが、どのようにしたら出来ますでしょうか。 複数行選択は出来ないようにしたいです。 選択したのち、メインフォームの選択ボタンを押すと、そのレコードのID番号を取得して、呼出元のフォームのIDフィールドに代入したいです。 ■画面の流れ・・・ Aフォーム → 帳票型Bフォームで、レコードを選び「開く」ボタンを押す→ B 'メインフォームとCサブフォーム)が開く Cサブフォームのレコードをチェックボックスにチェックを入れて選択する B ' メインフォームの「選択」ボタンを押すと B ' メインフォームと、その前のBフォームが閉じて Aフォームに戻り、AフォームのIDフィールドに選択したIDが格納される。 よろしくお願いします。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

揚げ足とりの意図では無い旨、あらかじめお断りしたうえで。 > うまく行きません。 「どう」うまく行きませんか? 「コピペしたので補足の記述が一字ー句違わない」なら、 [MyID]と[optSelect]の間はカンマではなく ! であるべき。 NzでNull対策すれば、iifの条件式そのものが結果として欲しい値。 iifもthenの値、elseの値、それらを区切るカンマもカッコも不要です。 画面の流れではフォームが3つになりましたが、必要? 以下、AフォームのIDフィールドと内容が見える状態で進めて下さい。 > Aフォーム → 帳票型Bフォームで、レコードを選び「開く」ボタンを押す→ Bが子フォームですので、「レコードを選び」の段階で 親フォームであるAフォームのIDフィールドへ値が入りますか? 3つのフォームなら、親・子・孫です。代入のイベントをどこに書いてますか? 孫フォームでクリックしたoptSelectのIDが親フォームに届いてますか? まずはこれを確認してみて下さい。 #タブレットの手書き入力なのでしんどい。 #夕食の支度したら戻って来ます。

superwonderful
質問者

補足

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をセットして終わり です。 でも、これですね、何も選択しなかった場合の事をまだ考えてません。 でもでも、やはりラジオボタンがうまく動きません。。。

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

すみません。!の件は間違い。 一覧表サブフォームのoptSelectの値は [=Nz([親フォーム]![ID])=Nz([ID]) ] ←右辺はレコードセットのID

superwonderful
質問者

お礼

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

superwonderful
質問者

補足

ご回答ありがとうございます。 >一覧表サブフォームのoptSelectの値は >[=Nz([親フォーム]![ID])=Nz([ID]) ] ←右辺はレコードセットのID これは、コントロールソースに書き込むのですか? ・レコードセットのIDとは、私はこのBメインとCサブのフォームのCの選択したレコードのIDの事だと理解しましたが。 ・親フォームのTextBoxIDにセットしたいのです。 なんとかうまくしたいのですが、また、ラジオボタンの値がクリックしてもなにも代わりません。 どうかお知恵をよろしくお願いします。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

チェックボックスは複数選択のためのもの。 単一選択なら、オプション(ラジオとも)ボタンを利用します。 でも結構面倒です。 メイン(以下「親」)フォームとサブ(以下「子」)フォーム間で テキストボックス参照と更新が必要。 子フォームでクリック行のID列値を親フォームのIDテキストボックスへ更新。 (方法は参考URLを参照して下さい) 子フォーム側は、レコードに定義されていないオプション列を設け、 値は自レコードのID列値と親フォームのIDテキストボックス値との比較結果とします。 比較により不一致ならFalseで「未選択」、一致ならTrueで「選択」になります。

参考URL:
http://www.happy2-island.com/access/gogo03/capter40002.shtml
superwonderful
質問者

補足

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

関連するQ&A

  • Access97:サブフォームを切り替え表示したい

    アクセスで仕事で用いられる専門用語の和英辞書データベースを作っております。 その辞書は用語の持つ意味や使われ方などから分類をしています。 分類一覧テーブルは分類ID,分類からなり、用語一覧テーブルは用語IDと用語からなります。 これらをつなぐのが和英辞書テーブルで、辞書ID,分類ID,用語IDからなり、 分類ID,用語IDはそれぞれ分類一覧テーブル,用語一覧テーブルのそれとリレーションシップを 組んでいます。 メインフォーム(既定のビュー=単票フォーム)には分類フィールドを作り、コンボボックスにします。 分類を選択したときまたはその横に「表示」ボタンを設置しておいてそのボタンをクリックしたときに 選択された分類に属する用語一覧がサブフォーム(既定のビュー=帳票フォーム)にリロードされてるように切り替えて表示させたいと考えています。 メインフォーム元:分類一覧テーブル,サブフォーム元:用語一覧テーブルにしたフォームは作成できました。 メインフォームのレコードを切りかえるとサブフォームも切り替わりますが、 コンボボックスの選択でサブフォームを切りかえ(たように見せ)る上記のようなフォームに このフォームから編集することはできるでしょうか? 無理なら新規にフォームを作りなおすとしてできるでしょうか? 自分の発想で2通りやってみましたが、いずれも失敗でした。 (詳しく書いたら文字数が800を超えたので省略します) テーブルの構成やリレーションを多少変えてもいいしフォームのレコードソースにクエリービルダを使ったりVBを組んでもいいので、メインフォームのコンボボックスの選択値によってサブフォームの表示を切り替える方法について教えて下さい。

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

    Accessでのフォームの操作についてお教え下さい。 使用しているバージョンは2010です。 フォームAにボタンを設置し、フォームBを開くようにしました。 フォームAとBはIDで連携し、指定したレコードを開くようにしています。 フォームBには、サブフォームCがあります。 サブフォームCには複数のレコードが入っており、 こちらも指定したレコードを表示させてたいのですが方法が分かりません。 フォームAに設置したボタンを押すと、フォームBの指定したレコードを開き、 フォームB内にある、サブフォームCの指定したレコードを表示させたいです。 VBA等で制御することは可能でしょうか。 可能でしたら方法をお教え下さい。 宜しくお願いいたします。

  • ACCESS サブフォーム レコード移動ボタンをつ

    ACCESS初心者です。 フォーム A サブフォーム B リンク親フィールド 名前 子リンク親フィールド 名前 サブフォームで表示されるレコードセレクタと移動ボタンを、フォームA上にオリジナルでボタンとテキストで下記項目を作成したいです。 作りたい項目 ボタン1 次のレコードへ移動 ボタン2 前のレコードへ移動 テキストボックス 現在のレコード/レコード数 ボタンの作成まではできましたが、イベントプロージャにどういう内容を入れたらよろしいのでしょうか

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

    メインフォームとサブフォームのあるフォームを作成しました。メインフォームを入力してから、サブフォームを入力し、次のレコードへ移動するのにメインフォームの移動ボタンを押すと、次のレコードのカーソルがサブフォームのフィールドへ移動します。メインフォームに移動する方法はありませんか?

  • ACCESSのサブフォーム

    ACCESSのサブフォームで、レコード表示について教えてください。 添付のサブフォームの一番左のコンボボックスに値を入力もしくは選択すると、未入力のレコードが下に1行分増えます。 (その他項目は連動して表示されます) サブフォームは帳票フォームを選択しているのですが、一般的には帳票フォームを選択した場合、レコードの数分だけ表示されると思うのですが、これは1レコードづつ増えていきます。 このサブフォームを作った人がもういないので、どうやって作ったのかが分かりません。 どなたか分かる人がいれば教えて頂けますでしょうか。 必要な情報があれば、調べて回答します。

  • access2007でのサブフォームへの入力

    仕入入力画面なんですが メインフォーム(仕入伝票テーブル)サブフォーム(仕入伝票明細テーブル) という構成です。 メインフォームで 仕入先をコンボボックスで指定すると サブフォームの 商品を入力するコンボボックスに メインフォームで選択した仕入先で購入できる商品が選べるように したいのですが、どうすればよろしいでしょうか? メインフォームの仕入先コンボボックスを選択する度に サブフォームの商品コンボボックスで選択できる内容を反映させたい です。 仕入先A : 商品1 商品2 仕入先B : 商品3 商品4 商品5 仕入先C : 商品6 商品7 商品8 商品9 メインフォームで仕入先コンボボックスで仕入先Aを選択すると サブフォームで選択できる商品コンボボックスは商品1と商品2 メインフォームで仕入先コンボボックスで仕入先Bを選択すると サブフォームで選択できる商品コンボボックスは商品3と商品4と商品5 というようなイメージで作りたいです。 どうかよろしくお願いします。

  • ACCESS VBAサブフォーム(DATA SHEET)の値の取得方法

    いつもお世話になっております。 ACCESS VBAでメインフォームに貼りついているサブフォームの値をとりたいのですが、うまくいっていません。 現状は module1でaをPublicで宣言 サブフォーム中のFORM_CURRENT()中で me.field1.setfocus a = me.field1.value として取得しています。 (実装ではメインのほうのボタンAを押したときに サブフォーム、FORM_CURRENT()で取得しておいた値を 別の変数に入れようとしています。) サブフォームのみで実行するとうまくいくようですが、 メインフォームに貼り付けるとうまくいかないようです。 (メインフォームに貼り付けて、サブフォームのFORM_CURRENTにブレイクを 貼って止めようとするが止まらない) そこでメインフォームボタンAクリックイベントで dim a1 as integer Forms![mainform]![subform].form.[field1].setfocus a1 = Forms![mainform]![subform].form.[field1].value として値をとろうと思ったのですが メインフォームからサブフォームにフォーカスをうつせない? らしく、サポートされていませんの旨のメッセージがでてしまいます。 やりたいこととしては、メインフォームに貼りついたサブフォームの 選択レコードのフィールド値を、メインフォームのボタンを押したときに 取得する。ということなのですが、うまくいっていません。 別の方法でもいいので、実現方法をご存知の方、よろしくお願いします。 ちなみにACCESSは2000を使用、ADOはサポートされていますがDAOは 非サポートのようです。

  • Access メインフォーム サブフォームにて

    お世話になります。 Accessにて メインフォームにコマンドボタンを置いて、クリックするとサブフォームのレコードが 次に行くようにしたいのですが、 コマンドボタン クリック Forms![メインフォーム]![サブフォーム名].Form!フィールド名.SetFocus DoCmd.GoToRecord , , acNext メインフォームとサブフォームのレコードが次に行ってしまいます。 サブフォームだけ次のレコードに行くには、どのようにすれば良いのでしょうか。 分かる方教えて下さい。 宜しくお願いします。

  • ACCESS サブフォームのフィールドにカーソルをあてる

    ACCESS2003で、VBAで簡単なプログラムを作っています。 <やっていること> ・フォームAからフォームBを開きます。 ・そのときにフォームAの番号と一致するデータをフォームBに表示します。 ・フォームBにはサブフォームCが埋め込んでいます。 このサブフォームCの中のフィールドDにカーソルが入っているようにしたいのですが、 Forms!サブフォームC!フィールドD.setfocus としたら、「カレントレコードには、フィールドDという名前のフィールドはありません」というエラーがでます。 フィールドDというフィールドは存在しています。 このような場合、どのように記述するのがよろしいのでしょうか。 よろしくお願いします。

  • ACCESSのサブフォーム教えてください☆

    お世話になっております。 メインフォームではなくサブフォームの抽出方法で、コンボボックスでサブフォームのフィールド(例えば、商品名)を選択後、テキストボックスで文字列(例えば、ソフトクリーム)を指定して検索する方法です。メインフォームでのやり方は調べて(VBA)分かったのですがサブフォームは試行錯誤してやってみたのですがうまくいきません。 すみませんが、宜しくお願いします。