ACCESSの表形式のフォームにYES/NOフィールドを足して
一覧フォームで任意のチェックボックスを選択して
選択されたデータのみを表示するようにしたいです。
しかしチェックボックスはレコードひとつひとつについてるのですが
認識されるチェックボックスは一番上のレコードのチェックボックスのみです。どうすればレコード別に判定できるのがわからないので
詳しい方ご教授お願いします。自分が書いたのは下記コードです。
Dim chkBln As Boolean
chkBln = False
If チェック50 = True Then
chkBln = True
MsgBox chkBln
End If
'検索結果の表示
DoCmd.OpenForm ("データ修正画面")
'自身のレコードソースに設定
Forms("データ修正画面").RecordSource = "Select * From T_障害票マスタ WHERE チェック = " & chkBln & ""
No.5ベストアンサー
- 回答日時:
No.3です。
> 一覧を全件表示しているフォームは一覧表形式なので、すべてのレコードの
> チェックボックスが"チェック50"になるので判定をどうすればいいのかわかりません。
・・・すみません、前回の回答で説明用の画像をつけるつもりでいたはずが、そのまま
忘れていました(汗)
現在、『チェック50』チェックボックスで、テーブルの『チェック』フィールドの値を表示
させている(=連結コントロール)のでしたら、フッタに設置したコマンドボタンの隣に、
”チェックボックスを新たに追加”してください。
このチェックボックスの名前を『チェック抽出用』とします。
※「チェック50」チェックボックスは表示用に使用しますので、そのまま残しておきます。
上記に基づいて前回の回答を修正すると、以下のようになります:
(重複するコメントは削除しました)
Private 抽出_Click()
Dim chkBln As Boolean, RecSrc As String
'「データ修正画面」フォームの名前を定数として設定
Const FName As String = "データ修正画面"
'レコードのデータを表示している「チェック50」ではなく、
'フッタに設置した「チェック抽出用」を、抽出条件に使用します。
chkBln = チェック抽出用
MsgBox "chkBln = " & chkBln
'If chkBln Then MsgBox "chkBln = " & chkBln
RecSrc = "Select * From T_障害票マスタ Where チェック = " & chkBln
'「データ修正画面」フォームを開く
DoCmd.OpenForm FName
'レコードソースを設定(定数として設定済みなので「"」括りは”無用”)
Forms(FName).RecordSource = RecSrc
End Sub
いつも詳しい説明ありがとうございます。
ご投稿いただいた方法で無事解決しました。
また、今回作成していた障害管理プログラムも思っていたよりも
ずっと良くできました。
VBAは初めてだったので皆さんのお力添えに感謝いたします。
ありがとうございました。
No.4
- 回答日時:
#2です
> ひとつだけチェックボックスを選択して実行すると全件表示されていしまいます。
> 2つ以上だと先に選択したレコードは表示されず2つのレコードから表示されてしまいます。
もしかしたら、そのチェック項目にチェックした後、確定操作していますか。
また、判別が逆ということはありませんか。
1つ目をチェックして確定せずに修正画面を起動したとしても、レコード内はチェックしたもので更新されていないと思います。
2つ以上だと1つ目が表示されなくて、・・・・
これは、判別が逆だから・・・と思います。
チェックを入れたらすぐに確定するには、
If (Me.Dirty = True) Then
DoCmd.RunCommand acCmdSaveRecord
End If
とか、
Me.Dirty = False
で確定後、OpenForm の処理を、判別逆でやってみてください。
(上記2つ目の方法は私自身試したことはありませんが、あるところで他の方が回答し、それで解決したお礼もありました)
詳しい説明ありがとうございます。
問題はDexMachinaさんが投稿してくれた方法で解決できました。
頂いたアドバイスもこれからの参考にさせていただきます。
またなにかありましたらお願いします。
No.3
- 回答日時:
やりたいことは、
『データ修正画面』で一旦全件表示した後、『T_障害票』テーブルの『チェック』
フィールドがオンまたはオフのものに絞り込んで再表示
ということでよろしでしょうか。
(「自身のレコードソースに設定」とされているので、別フォームではないものと判断)
上記の通りだとすると、チェックボックスは、
・詳細領域(レコードの表示領域)に設置(→レコード毎の値の確認・更新用):
『コントロールソース』に『チェック』フィールドを指定したもの(=連結コントロール)
・フォームのヘッダまたはフッタに設置(→絞り込み条件の指定用):
『コントロールソース』が空白のもの(=非連結コントロール)
の2種類が必要ですので、まずはその点をご確認下さい。
※フォームのヘッダ/フッタは、当該フォームをデザインビューを開いた状態で、メニュー
から「表示(V)→フォーム ヘッダ/フッタ(H)」を選択すると表示されます。
なお、ヘッダまたはフッタの一方のみが必要な場合は、不要な側をダブルクリックする
などしてプロパティシートを表示させ、『書式』タブの『高さ』を「0cm」に設定します。
(または、同タブの『可視』を「いいえ」にしても可)
とりあえず、「チェック50」の方が非連結ということなら、提示のコードでも動くかと
思いますが、不要部分などもありましたので、参考までに少し手を入れてみました。
Private 抽出_Click()
Dim chkBln As Boolean, RecSrc As String
'指定された抽出条件を確認(値を変数に設定)
chkBln = チェック50
'メッセージボックスで値を確認
MsgBox "chkBln = " & chkBln
'チェック50がオンの場合にのみメッセージが必要なら以下に差し替え
'If chkBln Then MsgBox "chkBln = " & chkBln
'SQL文の作成
'(Booleanでは値を「"」等で括る必要がないので末尾の「""」は省略しました)
RecSrc = "Select * From T_障害票マスタ Where チェック = " & chkBln
'自身のレコードソースに設定(自身の場合は「Me」で指定できます)
Me.RecordSource = RecSrc
'※「自身への設定=フォームは展開済」なのでOpenFormは不要です。
End Sub
この回答への補足
ご回答ありがとうございます。
すみません説明不足でした。
チェックボックスは詳細部分に配置してコントロールソースをテーブルのチェックフィールド(yes/no型)に設定しています。
フッタ部分にはコマンドボタンがあり、チェックの入ったフィールドのみをデータ修正画面に表示させたいと思っています。
自身のフォームと書いたのは一度データ修正画面を開いてそれからレコードソースを更新していたのでそう書きました。
一覧を全件表示するフォームとデータ修正画面は別のフォームになります。紛らわしくてすみません。
またレコードは常に一定ではないので非連結だと対応できない可能性があります。(増えたときなど)
一覧を全件表示しているフォームは一覧表形式なので、すべてのレコードのチェックボックスが"チェック50"になるので判定をどうすればいいのかわかりません。
こうゆう場合はどうすればいいのでしょうか?
No.2
- 回答日時:
チェックボックスは、非連結のものでしょうか?
であれば、以下参考になるかと
非連結のチェックボックスでレコードを選択する
http://hatenachips.blog34.fc2.com/blog-entry-28. …
テーブルのフィールドとしてチェックボックスと連結されているものがあるのなら
フォーム「データ修正画面」には、チェックが付いたものだけを表示したいのでしょうか。
であれば、OpenForm での WhereCondition に条件を指定します。(4つ目)
DoCmd.OpenForm "データ修正画面", , , "チェック = " & chkBln
(「チェック」名のフィールドがテーブル「T_障害票マスタ」にあるとして)
フォーム「データ修正画面」のレコードソースは、「T_障害票マスタ」だけを指定しておきます。
※ DoCmd.OpenForm は、一般的に ( ) は付けません(上記の様に)
※ フォーム「データ修正画面」起動後に、レコードソースを書き換えているようですが、フォームの「開く時」イベント(Form_Open)前に、設定されているレコードソースでの抽出は完了しているようですので、後からレコードソースを設定するのであれば、フォームの初期状態で指定しておかない方が良いと思います。
設定していなければ、余計なお世話ということで。
WhereCondition で指定したものは条件として加味して抽出されるようです(Form_Open前に)
ご回答ありがとうございます。
教えて頂いたとおりに(連結の場合)やってみたら。
ひとつだけチェックボックスを選択して実行すると
全件表示されていしまいます。
2つ以上だと先に選択したレコードは表示されず2つのレコードから表示されてしまいます。
しかも理由がわかりません。
こうゆう事ってあるんですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
準・究極の選択
「年収1000万円で一生カレーライス」か 「年収180万円で毎日何でも食べ放題」 あなたはどちらを選びますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
-
YES/NO型の値
Excel(エクセル)
-
ACCESSでコントロールソースの変更
Access(アクセス)
-
-
4
ACCESSでテーブルにあるチェックボックスを一括でYesにする方法を教えてください
Access(アクセス)
-
5
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
6
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
7
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
8
AccessクエリでYes/No型データの抽出
Access(アクセス)
-
9
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
10
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
11
access クエリ yes/no型のクエリの抽出の記述を教えて下さい。
Access(アクセス)
-
12
アクセスでフォームビューがみれません?
Access(アクセス)
-
13
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
14
VBとアクセスでSQL文に変数を使いたいのですが
Visual Basic(VBA)
-
15
ACCESSで値を代入できないとは?
Visual Basic(VBA)
-
16
Accessで文字列の長さによって、フィールドの幅を自動で合わせる方法
Excel(エクセル)
-
17
ACCESS 表形式フォームで1レコードずつ計算したい
Visual Basic(VBA)
-
18
2つ目のレコードの値を取得するには?
Access(アクセス)
-
19
ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい
Access(アクセス)
-
20
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataGridViewの、選択されてい...
-
[VBA] ADOの Clone と AddNew
-
DataGridViewの内容をDBに反映...
-
アクセスに登録した値を条件検...
-
Access を×ボタンで閉じ...
-
ADO VBA 実行時エラー3021
-
カレントレコードが無い事を判...
-
クライアントからのDBアクセス
-
HTA上データをExcelへ転記する...
-
VBAを使ってテキストファイルを...
-
大量のテキストデータの集計に...
-
アクセスでレポートの1印刷内...
-
HSP言語でテキストファイルを保...
-
ファイル書込みで一行もしくは...
-
条件をつけて日付の古い行を抜...
-
Oracleでの文字列連結サイズの上限
-
実績累計の求め方と意味を教え...
-
使うべきでない文字。
-
SQL文で右から1文字だけ削除す...
-
固定値を含む結合と複数テーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
レコードが存在しなかった場合
-
カレントレコードが無い事を判...
-
ファイル書込みで一行もしくは...
-
アクセスでレポートの1印刷内...
-
差し込み印刷のレコード数について
-
DataGridViewの、選択されてい...
-
レコードセット(ADO.Recordset)...
-
DataGridViewの内容をDBに反映...
-
Access でレコードセレクタが押...
-
固有レコード識別子の選択とは
-
Access を×ボタンで閉じ...
-
[VBA] ADOの Clone と AddNew
-
ACCESSで大量の更新を行うと「...
-
データセットのレコード更新が...
-
ワードの差込印刷で教えて下さ...
-
ヘッダレコードとトレーラレコ...
-
JSPのNULLレコード表示について...
-
サブフォームに新規レコードを...
-
VB6.0のIsNull関数に相当するもの
おすすめ情報