- ベストアンサー
アクセス:フォームでVBAを使わず氏名をリスト式で選んでレコード移動
アクセス初心者です。よろしくお願いいたします。No.1834440で質問したものですが、私の質問の表現不足のせいと理解不足のせいで、いただいたご回答をいまだに研究しています(現在進行中)が、なかなか把握することができません。ご迷惑をおかけして申し訳ありません。 【やりたいこと】: ★フォームでフィールド名《氏名》をリスト式で選びたい。右済の▼マークを押すと氏名が表示され、それを選ぶことで氏名入力済のレコードに移動し、他のたくさんある未入力のフィールドにデータを入力したいのです。 ★フォームの《氏名》の上で双眼鏡マークの検索(例:「山*」)をして選んで、レコード移動するイメージに近いのですが、上記のことにこだわりたいのは、私が異動でいなくなっても後任者(もっともっとアクセス超初心者)に引き継げるように便利でシンプルなものにしたいのです。 ★そこで、今回、できればVBAを使わずにそのようなことが可能なのかどうか、可能ならどのようにすればよいのかをご指導お願いいたします。 よろしくお願いいたします。前回ご回答くださった方含めて広くご指導いただけましたら幸甚です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
操作上ではマクロもVBも使わない方法です。 1.新規にフォームをテーブル氏名を基に作成します。 →単票形式・テーブル氏名を選択→OK 2.もう1個検索するためのフォームを作成します。 (1)このフォームにコンボボックスを張付けます。 →テーブル/またはクエリの値を表示する→氏名のテーブルを選択→選択可能なフィールドを選択(氏名) →次に、コンボボックスのプロパティ→その他タブ→名前を「氏名検索」 ⇒これでコンボボックス(右隅の▼マークを押すと氏名が表示されます)ができます。 (2)このフォームにサブフォームを張付ける →「既存のフォームを使用する」をチェック→1.で作成したフォームを選択 3.コンボボックスとサブフォームを関連付けします。 →サブフォームを右クリック→プロパティ→データタブで リンク子フィールド サブフォームのデータ項目名を「氏名」 リンク親フィールド コンボボックスの名前を「氏名検索」入れます。 これで「コンボボックスで選択した「氏名」と合致した内容をサブフォームに表示し、未入力のフィールドにデータを入力変更できます。 お試しください。
その他の回答 (3)
- sanbit
- ベストアンサー率32% (16/50)
>(1)保存をかけるときに、エラーメッセージが出ます。 デザインで修正で保存しましたが再現できません。ただし2000です。 以前(現役時代)にこのようなやり方で2000で作成したDBはXPで問題ありませんでした。フィールド名、ボックス名が半角混在の場合、全角に統一したことがあります。フイールド名ボックス名を確認ください。 申し訳ありません。「プロパティの設定値として指・・・・」よく分かりません。 >(2)サブフォームの下部のレコード移動バーのようなもの ⇒移動ボタン:コンボボックスで選択したデータが複数あるとき選択します。 ⇒消し方:サブフォームの基になっているフォームをデザインモードで開く →プロパティ→書式タブ→移動ボタンを「はい」を「いいえ」に。
お礼
ありがとうございました。
補足
さっそくのご回答、アドバイスをありがとうございます。 私もアクセス2000の入った他のPC端末で試したところ、そちらでは全くエラーはでませんでした。 デザインからフォームビューに切り替えさえしなければ(フォームビューだけの入力で終始するならば)このエラーがでないことから、いっそのこと、 ◆他の入力担当者にさわれないようにフォームビューからデザインビューに切り替わらないようにロックをかける方法があるならばお教えくださいませんか?(たびたびの追加質問をお許しください) ◆サブフォームのレコード移動はOFFにできました。 ありがとうございました。
- Dxak
- ベストアンサー率34% (510/1465)
> マクロok、クエリokということでご指導いただけない > でしょうか? えっと、了解です。 個人差がありますので、試してみて使用感が良さそうな物を使用してください。 最初に、クエリーで制御して、条件に合うものだけ出して移動したようにみせかけるパターンです。 これは、実際移動しているわけではありません。 ここの利点は検索結果なしだと新規レコードとなります。 では、手順に、 1.テーブルを作成します。 テーブル名:Tbl名簿 フィールド:氏名 テキスト型 フィールド:・・・略・・・ 2.フォームを作成します。 レコードソース:Tbl名簿 (後で訂正します) レコードからのフィールドのコントロール類を設定し、 コンボボックス:ctl氏名検索 (コントロールソースなし) 値集合ソース: SELECT Tbl名簿.氏名 FROM Tbl名簿 ORDER BY Tbl名簿.氏名; と、コントロールを追加します。 で、一旦保管して終了 ここで、フォームをコピーして置いておくと、マクロで検索するときにも使えます。 3.フォームをデザインビューで開いて、「ctl氏名検索」の更新後処理に、マクロで「再クエリ」だけマクロに入れて保管終了。 4.フォームをデザインビューで再度開き、フォームのレコードソース「Tbl名簿」の後ろの方の「・・・」の部分をクリック、クエリービューが表示されるので、SQLビューに変更して下記のSQL文をコピー&ペースト SELECT Tbl名簿.* FROM Tbl名簿 WHERE Tbl名簿.氏名 Like [Forms]![フォーム名]![ctl検索]; で、デザインビューにすると、どう言うことだか判ります。 で、保管して終了。以上で完了です。 最初にフォームビューで開くと、新規レコードになってます。コンボボックスを変更するとフィルタで選択した氏名だけレコードに表記されます。 で、先ほどの3.からマクロで検索へ移行します。 5.フォームをデザインビューで開いて、「ctl氏名検索」の更新後処理に、マクロで コントロールの移動:「氏名」のコントロール名、単純に行くと氏名 レコードの検索 : 検索データ =[Forms]![フォーム1]![ctl検索] (「=」から入れてください) 検索条件 フィールド全体 大小文字区分 はい 検索方向 すべてのレコード 表示書式で検索 いいえ カレント・・・ はい 先頭から検索 はい で、設定すれば移動します。 こっちの利点は本当にレコード間の移動と言うことですが、逆に検索結果が存在しない場合、移動しない。と言う問題が・・・マクロで条件を追加すればメッセージボックスでエラー表示も可能です。 で、とりあえずマクロ、クエリ可の場合です。 とりあえずは、がんばってみてね。
お礼
Dxakさん、ありがとうございます。 初心者レベルの私に懇切丁寧な再三のご回答を心より感謝いたします<(_ _)> 結論としてですが、私のレベルではDxakさんのご指導内容を理解できませんでした。申し訳ありません。m(_ _)m。マクロOK,クエリOKと申し上げてておきながら・・・。きっとまとを得たすばらしいご回答内容だと思うのですが、私の理解力とスキルの低さのためにお時間をとらせてお付き合いいただきましたことをお詫びとともに心より感謝申し上げます。ご回答内容は無駄にならないように勉強してみます。本当にありがとうございました。
- Dxak
- ベストアンサー率34% (510/1465)
こんです~ VBA無であれば、ほかにマクロも不可でしょうか? クエリー側で条件を追加して「再クエリ」(フィルタを使用)か、マクロ側で「レコードの検索」(前回のVBAと内容は一緒)とか? どちらも、マクロと言う形ですが、VBAと実施している内容は同じになります。 こちらも不可であれば、ダミーテーブルを作成し、親フォームとサブフォームで連結って言うのもありますが・・・、私的には使用感に違和感があります。 どうされます?
補足
こんばんは^^。どうもありがとうございます。マクロok、クエリokということでご指導いただけないでしょうか?よろしくお願いいたします。本日は退社しますので、月曜以降の閲覧になるかもしれませんが、どうか、どうか、よろしくお願いいたします^^;
お礼
はじめまして、sanbitさん、ありがとうございます。とてもシンプルな方法ですが、理想のフォームができました。心からありがとうございましす^^。締め切るのは他のご回答を頂いた方の内容を研究しますのでもう少しお時間ください。では、感謝を込めて。
補足
たびたび、失礼します。もう一度お世話いただきたいのです。^^;お助けください。 (1)保存をかけるときに、 「プロパティの設定値として指定した値が正しくありません。プロパティの有効な設定については、オンラインヘルプの各プロパティのトピックスで確認してください」 と出ます。フォームビューで入力等したあとだけなら保存するときになんの問題もないのですが、一度デザインビューにしてフォームビューに戻したときに保存しようとすると、そのメッセージが出ます。どのように対応すればよろしいでしょうか?あるいは、入力担当者がデザインビューを触る必要はないので、無視してよいものでしょうか? (2)サブフォームの下部のレコード移動バーのようなもの(正式にはなんと表現すればよいのかわかりません^^;)を表示しないようにすることはできますでしょうか? アクセスは、XPです。よろしくお願いいたします。お待ちしています^^