- ベストアンサー
コマンドボタンでレコードソースを変更する方法
- 簡単な方法で、一覧フォームにコマンドボタンを配して「昇順、降順、未設定」の3通りの表示を実現させたい。
- 予め3つのクエリを作成しておき、フォームのコマンドボタンでクエリを切り替えできれば「簡単に実現」できるかもしれない。
- コマンドボタンをクリックした時点でフォームの並び替えに即反映の有無。他の手段についてもアドバイスを受けたい。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは >3,オブジェクトと名前 [フォームの構成] 購入品管理電池管理メインフォーム → 購入品管理電池管理一覧フォーム「レコードソース:購入品管理電池管理クエリ」 [クエリの]購入品管理電池管理クエリ = ID「クエリから外す」、 並べ替え「商品名のフィールドに昇順設定」 ★ここは、これで完璧です。 ACCESS2007に添付のような、フォームデザインツールの配置リボン内に 表形式ツールが有ればこれを利用すると、ボックスの重なり、配置、 ラベルボックスと他のボックスとの位置合わせ、サイズ合わせの 煩わしさから解放されます。 フォーム作成の前に、クイックアクセスツールバーによく使うツールバーを追加します ★よく使うツールバーを追加 [作成]→[空白のフォーム右クリック]→[クイックアクセスツールバーに追加] →[配置]→[表形式右クリック]→[クイックアクセスツールバーに追加] →[スペースの調整の右端]→[なし右クリック]→[クイックアクセスツールバーに追加] →[デザイン]→[プロパティーシート右クリック]→[既存のフィールド右クリック] →[クイックアクセスツールバーに追加] 続いてデザインビューの複数のボックスをアクティブにして(Shift+ボックス) →[配置リボン]→[サイズ/間隔▼]→[自動調整右クリック] →[アクイックアクセスツールバーに追加] 同様にして高いコントロールにわせる、低いコントロールに合わせる、 広いコントロールに合わせる、狭いコントロールに合わせる、左右均等にする、 上下の間隔を均等にするをクイックアクセスツールバーに追加します これだけの→クイックアクセスツールバーに表示しきれませんが、 クイックアクセスツールバーをリボンの下に表示すると表示幅が広がります →[ファイルリボン右クリック]→[クイックアクセスツールバーをリボンの下に表示する] →[ファイルリボン右クリック]→[リボンを折りたたむ] これで準備が整いました。 右クリックの動作のように使えるツールが強調表示されます。 ------------------------------------------------------------------------ ★購入品管理電池管理フォーム作成 [フォームデザイン]→[書式タグの既存のビュー右端]→[帳票フォーム]→[データタグの右端V] →[購入品管理電池管理クエリ] (ここで[データタグの右端…]クエリデザインになる) →[既存のフィールドの追加]→[リストされたフィールドを左上隅近くへドラッグ]→[表形式] →[なし] →[任意の場所をクリックしてアクティブのセルを解放] →[フォームヘッダ内のボックスを] →[フォーム名のラベルを配置できる高さを確保するため下へ移動] →[詳細バーを上へ移動]→[詳細内の左端ボックスを上へ移動] →[フォームフッターバーを上へ移動]→[フォームフッターの空白が消えるまで上へ移動] →[フォーム1タグの右にあるXで閉じる]→[はい] →[「購入品管理電池管理」と入力]→[OK]
その他の回答 (6)
- chayamati
- ベストアンサー率41% (260/624)
お尋ね1:フォームはデータを表示する 「購入品管理電池管理一覧フォーム」でよろしいでしょうか。 表示はデザインビューにしておくのでしょうか ★既にシステムが出来上がって活用されているのでは オブジェクト名の変更は難しいでしょうが参考まで 1.オブジェクト名は短い方がよい 2.一覧はフォームではレポートに付けるものでしょう 印刷プレビューで画面確認も出来ます ・「電池管理登録」 ・「電池管理問合せ」追加、修正、削除禁止のフォームで 電池マスタのコンボボックスより抽出表示 ・「電池管理一覧表」 DoCmd.OpenReport "電池管理一覧表", acViewPreview" お尋ね2:カレントデータベースのフォームの表示のところが「PWフォーム」になっています。 これが今作ろうとしている「メニュー」フォームだと思います。 このフォームの空いている場所に4-2で説明したコンボボックスをこの「PWフォーム」のどこかに配置します [PWフォームをデザインビューで開く]→[コンボボックス]→[PWフォームのどこか] →[次へ]→[TBLクエリ]→[選択したフィールドへ移動]→[次へ]→[次へ]→[完了] →[ボックス外]→[右側のボックス] →[その他タグ]→[名前欄のコンボ1をクエリ名と変更]→[左側のボックス] →[書式タグの標題をクエリ名と変更]→[右側のボックス] →[イベントタグの変更時の右端の…] ここでVBAの基本形 Private Sub クエリ名_Change() End Sub が表示されます →[Private Sub クエリ名_Change()の次の行に半角モードで docmd.と入力すると命令文の 続きがリストされます]→[OpenQuery]→「クエリ名」と入力] Private Sub クエリ名_Change() DoCmd.OpenQuery クエリ名 End Sub 以上で[PWフォーム]の修正完了です。 クエリを再度開くと一覧表が表示され、各項目の右端▼をクリックすると昇順、降順、とフィルターが あるのが解りますね
- chayamati
- ベストアンサー率41% (260/624)
こんにちは、時間がないのでわかりにくい説明で失礼します >止まっている作業:5.ファイルを開いたときこのメニューフォームを開くように設定します 回答No.の4-2.は新規にメニューフォームを作成する流れです 4-2.空白のフォーム「メニュー」を作成し、ここへ「TBLクエリ名」を レコードソースとするコンボボックスを配置しこのボックスのChainge(変更時) イベントで該当クエり)を開くVBAを起動する 作成の流れ(殆どがクリックで進みます [作成リボン]→[空白フォーム]→[コンボボックス]→[空白ホームのどこか] →[次へ]→[TBLクエリ]→[選択したフィールドへ移動]→[次へ]→[次へ]→[完了] →[ボックス外]→[右側のボックス] →[その他タグ]→[名前欄のコンボ1をクエリ名と変更]→[左側のボックス] →[書式タグの標題をクエリ名と変更]→[右側のボックス] →[イベントタグの変更時の右端の…] ここでVBAの基本形 Private Sub() End Sub が表示されます →[Private Sub()の次の行に半角モードで docmd.と入力すると命令文の 続きがリストされます]→[Openquer]→[クエリ名と入力] →[デザインビューを右上隅で閉じる]→[ファイル名をメニューと入力] 以上でメニューフォームの完成です。 この最後の行に抜け落ちが有りました。 →[デザインビューを右上隅で閉じる]→[はい]→[ファイル名を「メニュー」と入力]→[OK] こちらで作成したメニューフォームを添付します。 このフォームの明細欄に、色々なボックスを配置して、これらのイベントで他のフォーム、レポートを開きます フォームヘッダーにご覧のような項目のボックスを配置し(別にプロフィールと呼ぶテーブルを作成) フォームフッターにご覧のような日付のテキストボックスを配置し基準日に対する日付をVBAD計算します。
- chayamati
- ベストアンサー率41% (260/624)
今日は >異なる所「コマンド表示」がございました。 以下のレベルで止まっていますので、ご理解を頂いてのアドバイス 「この後の作業手順などですが・・・。」をお願いします。 (実際に表示される記述では) Private Sub クエリ名_Change() End Sub ★そうでした。この中へ DoCmd.OpenQuery クエリ名 と入力して --------------- Private Sub クエリ名_Change() DoCmd.OpenQuery クエリ名 End Sub --------------- とします フォームデザインビューの右上隅の✖で閉じます 註 ここで、右上角には2つの✖が表示されますが 外側の✖はデザインビューのもので、 内側の✖はVBAのものです 先ず内側の✖でVBAを閉じて はい 次に外側の✖でデザインビューを閉じて はい フォーム名を メニュー と入力して はい 以上でフォームが完成です。 TBLクエリ(テーブル)に現在あるクエリ名を登録してから メニュー(フォーム)を開いてください このプルダウンリストの規定値は16ですが画面の範囲内で広げることが出来ます
補足
何度もアドバイスを頂き感謝致しております。スキル不足「近視眼的にトレースしている状態」で、作業の目指す全体像「仕上時の動作機能」が把握出来ていないのが、再質問「ご面倒をお掛けしています」の原因になっていると思っています。何とか完成させたいと思いますので、宜しくお願いします。 止まっている作業:5.ファイルを開いたときこのメニューフォームを開くように設定します [ファイルリボン]→[オプション]→[現在のデータベース] →[フォーム表示でメニューを選ぶ]→[OK] 1,お尋ね1:フォームはデータを表示する「購入品管理電池管理一覧フォーム」でよろしいでしょうか。表示はデザインビューにしておくのでしょうか。 2,お尋ね2:[ファイルリボン]→[オプション]→[現在のデータベース] →[フォーム表示でメニューを選ぶ]→[OK] [ファイルリボン]→[オプション]は表示できましたが(都合によりAccess2007でDBを作り直し中)、次の操作に進めていません。 現在、カレントデータベースのフォームの表示のところが「PWフォーム(Access起動時に開くフォーム)」になっています。 3,オブジェクトと名前 [フォームの構成] 購入品管理電池管理メインフォーム → 購入品管理電池管理一覧フォーム「レコードソース:購入品管理電池管理クエリ」 [クエリの] 購入品管理電池管理クエリ = ID「クエリから外す」、並べ替え「商品名のフィールドに昇順設定」 以上ですが、宜しくお願いします。
- chayamati
- ベストアンサー率41% (260/624)
>「他の手段について」 一般的なやり方など、アドバイスがありましたらお願いします。 ★あなたの考え方に間違いないので、これを実現するには どのようにするかで進めてきましたが、完了まで時間がかかりそうなので 「自分ならこうする」ということで説明します。 ゴメンなさい、今までのことは忘れて下さい >-------------------------------------------------------------------- ・クエリは出来上がっている ・一覧フォームにコマンドボタンを配して「昇順、降順、未設定」の3通りの表示を実現させたい。 ・対象DBの数「数十個」が多くできるだけ作業の負担を軽減させたい。 ・コマンドボタンをクリックした時点でフォームの並び替えに即反映の有無。 1.出来上がっているクエリにオートナンバー型のフィールドが有ればこれは除去して下さい。 2.テーブルもクエリも全てのフィールドに並び替え(昇順、降順)とフィルタの機能が備わっています 3.たいていのフォームはクエリが内包していますし、 今あるクエリをフォームのレコードソースにすることも出来ます 4.これが、本番の「自分ならこうする」です 4-1.クエリ名を保存するテーブル「TBLクエリ名」を作成(フィールドは重複なしのクエリ名一つのみ) 主キーに設定するとユニークなフィールドになりますが、フィールド名の訂正が出来ないので フィールドのプロパティーのインデックスで重複なしと定義します。 4-2.空白のフォーム「メニュー」を作成し、ここへ「TBLクエリ名」を レコードソースとするコンボボックスを配置しこのボックスのChainge(変更時) イベントで該当クエり)を開くVBAを起動する 作成の流れ(殆どがクリックで進みます [作成リボン]→[空白フォーム]→[コンボボックス]→[空白ホームのどこか] →[次へ]→[TBLクエリ]→[選択したフィールドへ移動]→[次へ]→[次へ]→[完了] →[ボックス外]→[右側のボックス] →[その他タグ]→[名前欄のコンボ1をクエリ名と変更]→[左側のボックス] →[書式タグの標題をクエリ名と変更]→[右側のボックス] →[イベントタグの変更時の右端の…] ここでVBAの基本形 Private Sub() End Sub が表示されます →[Private Sub()の次の行に半角モードで docmd.と入力すると命令文の 続きがリストされます]→[Openquer]→[クエリ名と入力] →[デザインビューを右上隅で閉じる]→[ファイル名をメニューと入力] 以上でメニューフォームの完成です。 5.ファイルを開いたときこのメニューフォームを開くように設定します [ファイルリボン]→[オプション]→[現在のデータベース] →[フォーム表示でメニューを選ぶ]→[OK] -------------------------------------------------------------------------- これでクエリが増えても直ぐ対応できますが、DBの数が多いような気がします。 種別等のフィールドを追加することでDBを統合できませんか
補足
アドバイスを頂きまして有難うございます。ご指示の通り作業を進めましたが、異なる所「コマンド表示」がございました。以下のレベルで止まっていますので、ご理解を頂いてのアドバイス「この後の作業手順などですが・・・。」をお願いします。 [オブジェクト(新規作成)] テーブル名:TLBクエリ フィールド名:クエリ名「オートナンバーフィールドなし」 フォーム名:メニュー「コンボボックス1個 = 名前:クエリ名」 [コンボボックス設定] コンボボックス「名前:クエリ名」→ イベント「変更時」→ コードビルダ (アドバイスの記述では) Private Sub End Sub (実際に表示される記述では) Private Sub クエリ名_Change() End Sub 以上ですが、宜しくお願いします。
- chayamati
- ベストアンサー率41% (260/624)
- chayamati
- ベストアンサー率41% (260/624)
今晩は >簡単な方法で、一覧フォームにコマンドボタンを配して 「昇順、降順、未設定」の3通りの表示を実現させたい。 予め3つのクエリ「昇順、降順、未設定」を作成しておき、 フォームのコマンドボタンでクエリを切り替えできれば「簡単に実現」 できるかもしれない。 ★お考えの通りですが、コマンドボタンは昇順と降順だけで、 未設定は必要ないでしょう 従て昇順クエリと降順クエリの2種類だけで充分です コマンドボタンの作成 【フォームをデザインビューで開く】 →【コマンドボタンをフォーム上にドラッグ】→【種類をその他】 →【ボタンの動作をクエリの実行】→【次へ】→【リストのクエリの1つ】 →【次へ】→【文字列に変更】 →【クエリの実行をクエリ名に変更入力】→【次へ】 →【コマンドをクエリ名に変更入力】→【完了】 他のクエリーも同様に専用のコマンドボタンを作成します >簡単発言の背景) 1,レコードソースを変更すれば実現できるのではとの単なる思い付きです。 しかし、コマンドボタンのワンクリックで可能にできるスキルがない。 2,対象DBの数「数十個」が多くできるだけ作業の負担を軽減させたい。 ★数十個のDBにコマンドボタンを配置するのは大変ですね コマンドボタンの代わりにコンボボックスでプルダウンリストより選択し チェンジイベントでクエリをVBAで開く方法もあります。 >コマンドボタンをクリックした時点でフォームの並び替えに即反映の有無。 ★ほとんどのフォームはクエリーを内包しています。 表現を変えるとテーブルとフォームとの仲立ち役がクエリです。 従って、コマンドボタンの開く対象をクエリからフォームに 変更すれば事足ります →【種類をその他】を→【フォームを開く]に変更する
補足
chayamati様へ 早速のアドバイス有難うございます。私のスキル不足で再質問させて頂きますことお許しください。 【フォームをデザインビューで開く】 →1【コマンドボタンをフォーム上にドラッグ】→2【種類をその他】 質問の1,対象フォーム「名前:仮に1とします」にボタンを作成すると解釈しました。2の手順が分かりません。「コマンドボタンのイベントのマクロに(種類をその他・その他)がヒットできませんでした。」結果、お恥ずかしいことに1のみで止まってしまいました「1も間違っているのでしょうか」。 →3【ボタンの動作をクエリの実行】→4【次へ】→5【リストのクエリの1つ】 →6【次へ】→7【文字列に変更】 →8【クエリの実行をクエリ名に変更入力】→9【次へ】 →10【コマンドをクエリ名に変更入力】→11【完了】 12 他のクエリーも同様に専用のコマンドボタンを作成します。 再質問の2,12の「他のクエリーも同様に専用のコマンドボタン」とありますが、クエリ参照元のフォームと理解してよろしいでしょうか。 以上ですが、宜しくお願いします。
お礼
親身なアドバイスを頂きまして本当に有難うございます。既存のデータベースを使って対処していましたが、手違い「理解不足」でデータベースに不具合を出してしまいました。単純な操作ミスでもあり簡単に復帰できましたが、リスク回避を視点に新たなデータベースを用意し、リスクを取らない方法で取り組む事にしました。元データベース「本体」から必要なオブジェクトだけをインポートすれば、新たに作り直す必要もありませんから。アドバイス「詳細な操作手順」を頂いた一連の操作をトレースすれば、私でも完了できると確信をして居ります。以上の様に、安心して取り組める環境が整っていますので、じっくり完成させたいと思っています。完成宣言が出来ずにお恥ずかしいですが、ご理解をお願いします。有難うございました。