DXR165の備忘録

自分用の備忘録です。

Access フォーム コンボボックス攻略!  

フォームを作成する上で避けて通れないコントロールが、このコンボボックスです。使用頻度はテキストボックスに次いで高いのではないでしょうか?。一見簡単そうですが、各プロパティをいじっくって調整しないといけません。また、注意しないといけない点もあります。一度、ウィザードを使わずに作成してみて下さい。仕組みがよくわかります。以下、私の個人的にしっくりきている使い方を記します。

1. 例えば、売上入力フォームの販売した社員番号を入力する際、アシストするためにコンボボックスのドロップダウンリストから社員番号と社員氏名の組みで表示させ、社員氏名から判別し選択することで社員番号を格納する。このように、マスターテーブルの主キー値を入力する補助としてキー値を特定できる値を表示させることを一般的に前提としているようです。

2. ドロップダウンリストは主キー値は非表示にし、格納値として設定し、キー値を特定できる値を1列表示させます。上記の例では社員番号は非表示で社員氏名を1列表示する。

3. ドロップダウンリストの各列を「表示する」「表示しない」を制御するのは、なんと"ColumnWidths/列幅" プロパティで該当列の幅を0cmにするそうです。なんか原始的な感じですね。

4. 上記のように設定した場合、コンボボックスのテキスト ボックス部分に表示される値は社員氏名であり、社員番号ではありません。しかし、実際にコンボボックスに格納されている値は社員番号です。この点は勘違いしやすい部分ですので注意が必要と思われます。

category: Access フォーム

tb: 0   cm: 0

Access フォーム デザイン時のグリッド  

フォーム・レポートのコントロールを配置する際、グリッドは欠かせません。このグリッドの細かさを決めるのがフォームのプロパティ X軸グリッド数とY軸グリッド数です。プロパティシートから設定します。個々のオブジェクト単位に設定でます。私はオプションの設定にあるのかと思いだいぶ捜索しました。

category: Access フォーム

tb: 0   cm: 0

Access フォーム マウスホイール問題?  

連結フォームでマウスホイールを動かすと、レコードも移動してしまう問題があるようです。意図せずしてホイールを触ってしまうと、レコードが移動し、編集中だったものは確定されてしまいます。Access 2003 ではこの問題があるようですが、Access 2007 以降では解消され、既定の設定ではホイールを動かしてもレコードは移動しないようです。

category: Access フォーム

tb: 0   cm: 0

Access フォーム タブコントロール  

フォームで使えるコントロールにタブコントロールがあります。フォームのテキストボックスなどが多く縦長になってしまい、スクロールしないとテキストボックスが見えないなどのとき、これを使います。一見使うのに難しそうですが、意外と簡単です。

1.  既存のコントロールをタブコントロールのページに移動するときはカットアンドペーストで移動させます。キャッチアンドドロップは使えません。

2.  タブコントロールのページ内のタブオーダー(カーソルが行く順番)も忘れずに設定しましょう。このとき、Access 2010 ではタブコントロールの、[Office テーマの使用]プロパティを[はい]にしているとページ内のタブオーダーが効かない場合があります。[いいえ]にすると問題ないようです。参考dxr165.blog.fc2.com/blog-entry-106.html

3.  フォームの"Cycle/Tab キー移動" プロパティを規定値の[すべてのレコード]にしていると最初のページの最終コントロールでEnter キーを押すと次レコードに移ってしまい、次のページを参照・編集できません。[カレントレコード]にすると次レコードに行かず、次ページにアクセスできます。

category: Access フォーム

tb: 0   cm: 0

Access フォーム IME 関連 プロパティ  

フォームのテキストボックスなどでは、IME の制御が使いやすさを左右します。以下にそのためのポイントと解説を書きます。


・テーブル定義でテキスト型のフィールドを作成すると規定値でIME 入力モード:オン、一般の設定がされる。

・フォームウィザード、オートフォームなどで作成するとテキストボックスなどの IME 入力モード はコントロールソースのフィールドの IME 入力モード 設定が継承されます。

・フォームデザインでテキストボックスなど新規で貼り付けるとIME 入力モード:コントロールなし、 一般が規定値で設定される。

・できるだけIME の設定はフィールドでしておくとフォームのほうで修正は不要と思われます。

・IME 入力モード プロパティ
[コントロールなし]→フォーカスが移動する前の設定が、そのまま使われます。
[使用不可] →IME 入力モードの設定を変更することはできません。当然、半角英数でしか入力できません。
[オフ]→IME 入力モードをオンにします。

・IME 入力モード プロパティ の[使用不可] と[オフ]の違いは[オフ]はそのテキストボックスにフォーカスが移動するとオフにはなるが、その後手動でオンにすることができます。[使用不可] は」それができません。

・人名や住所などの場合は[オン]で人名/地名に設定し、電話番号などは[使用不可]にするとユーザーはIME を切り替えなくて済みます。

category: Access フォーム

tb: 0   cm: 0

Access 使用可能/編集ロック プロパティ  

フォームのコントロールに使用可能/編集ロック プロパティがあります。2つ組み合わせで以下の制御ができます。

使用可能:[はい](規定値)・編集ロック:[いいえ](規定値)
フォーカス取得:可 編集:可 コピー:可 表示:通常

使用可能:[はい](規定値)・編集ロック:[はい]
フォーカス取得:可 編集:不可 コピー:可 表示:通常

使用可能:[いいえ]・編集ロック:[はい]
フォーカス取得:不可 編集:不可 コピー:不可 表示:通常

使用可能:[いいえ]・編集ロック:[いいえ](規定値)
フォーカス取得:不可 編集:不可 コピー:不可 表示:グレー

備考
よく使うのは使用可能:[いいえ]・編集ロック:[はい]でしょうか。編集されたくない、カーソルもいかなくてよいなどのときに使います。

category: Access フォーム

tb: 0   cm: 0

Access サブフォームの仕組み  

メインフォームに「サブフォーム/サブレポート」コントロール を埋め込む。
メインフォームのレコードソースにはサブフォームと結合するテーブルまたはクエリを設定。
サブフォームとしてメインフォームの「サブフォーム/サブレポート」コントロール に設定するフォームは1つのフォームとして作成する。
サブフォーム用に作成したフォームのレコードソースにはメインフォームのレコードソースと結合するテーブルまたはクエリを設定。
メインフォームの「サブフォーム/サブレポート」コントロール に以下のプロパティを設定。
  ソースオブジェクトに上記で作成したサブフォーム用のフォーム名を設定。
  リンク親フィールドとリンク子フィールドに結合するフィールドを設定。

category: Access フォーム

tb: 0   cm: 0

Access 独自メニューフォームの作成  

フォームで独自メニューを作成するときの各ウィンドウの設定です。下記の設定以外は規定値のままです。プロパティ シートで設定します。あくまでも筆者の一般的な設定値です。

メインメニュー フォームのプロパティ
書式タブ/
自動中央寄せ: はい (いつも定位置で表示できる)
境界線スタイル:  細線 (サイズを変えれなくなる)
レコードセレクタ:  いいえ (不要パーツは消す)
移動ボタン:  いいえ (不要パーツは消す)
スクロールバー:  なし(不要パーツは消す)
コントロールボックス: いいえ (フォームを閉じる・最大化/最小化できなくなる)
解説:ショートカットメニューでフォームを閉じることが出来ますが、閉じるコマンドボタンなどを実装する必要があります。

メインメニューから呼び出されるフォームのプロパティ
書式タブ/
自動中央寄せ: はい
その他タブ/
作業ウィンドウ固定: はい (他のフォームには移れない。メニューバーとツールバーは機能します)
解説:メインメニューは操作できなくなり、自分自身を閉じなければメインメニューには戻れなくなります。ウィンドウが並列で処理されなくなり、設計が楽です。

category: Access フォーム

tb: 0   cm: 0

Access フォーム コントロールボックス プロパティ  

コントロールメニューを制御します。プロパティの名前はコントロールボックスですので紛らわしいですね。規定値は[はい]です。[はい]を設定するとウィンドウのタイトルバー左端のアイコンや右端のボタンの操作が可能となります。
[いいえ]を設定すると最小化/最大化ボタン プロパティや閉じるボタン プロパティの影響を受けず、ウィンドウのタイトルバーにはフォームの表題のみが表示されます。

category: Access フォーム

tb: 0   cm: 0

Access フォーム 境界線スタイル プロパティ   

境界線の形状だけが変更されるプロパティではありません。また、フォームの詳細な外見はWindowsのバージョンやテーマによって異なる場合があります。規定値は[サイズ調整可]です。

 名称   境界線   サイズ   コントロール 最小化/最大化 閉じるボタン
                   メニュー   ボタン
 なし     なし   変更不可    ×      ×      ×
 細線     細線   変更不可    ○      ○      ○
 サイズ調整可 既定   変更可     ○      ○      ○
 ダイアログ  細線   変更不可    ○      ×      ○


注意事項
[なし]または[ダイアログ]を設定すると、以下のプロパティの設定には影響を受けません。
[なし]:最小化/最大化ボタン コントロールボックス 閉じるボタン
[ダイアログ]:最小化/最大化ボタン

備考
[細線]と[ダイアログ]の大きな違いは最小化/最大化ボタンが[ダイアログ]には表示されないことです。

category: Access フォーム

tb: 0   cm: 0

Access フォームの表示サイズ・位置  

Access 2003の場合

フォームを新規作成すると以下のフォーム プロパティの規定値が設定されることにより、フォームは以下の表示サイズ・位置になります。(フォーム ウィザードやオートフォームで作成すると以下の規定値以外が設定されることがあります。)

"AutoResize/サイズ自動修正" プロパティが [Yes/はい](規定値)
→フォームのサイズが自動的に変更され、レコード全体が表示されます。

"AutoCenter/自動中央寄せ" プロパティに [No/いいえ](規定値)
→フォームビューまたはデザインビューで開かれ、最後に上書き保存されたときの表示位置が記憶され、次回の表示の時にその位置で表示される。


フォームを好みのサイズにするには、"AutoResize/サイズ自動修正" プロパティを [No/いいえ] に設定します。フォームをフォームビューまたはデザインビューで開きます。 ウィンドウの境界線をドラッグし、フォームのサイズを変更します。 上書き保存 をクリックします。すると、次回に開いたときにこのときのサイズ・位置で表示されます。 


アプリケーション ウィンドウの中心にフォームを表示させるには、"AutoCenter/自動中央寄せ" プロパティに [Yes/はい] を設定します。

category: Access フォーム

tb: 0   cm: 0

Access レコードの保存   

データシートビューやフォームビューなどでレコードを変更したときに、変更内容を保存するショートカットキーはShift + Enter です。

category: Access フォーム

tb: 0   cm: 0

Access フォームでのデータの検索  

フォームを表示して、検索したいフィールドにカーソルを移動し、ツールバーの<検索>をクリックすると検索と置換ダイアログボックスが表示される。 ショートカットは Ctrl + F 

テーブルまたはクエリに連結されているフォームに表示されているフィールド(当然連結フィールドでなければならない)を検索条件にデータを検索します。Access共通の操作方法ですが、Accessを知らないユーザーには操作が難しいかもしれません。また、以下のダイアログボックスの設定で検索結果が違うので注意が必要です。

[探す場所]
選択したフィールド(規定値)
検索するフォーム → フォームに表示しているすべてのフィールドが検索される。

[検索条件]
フィールド全体  → 検索する文字列と完全一致するデータが表示(規定値)
フィールドの一部 → 検索する文字列が含まれるデータが表示
フィールドの先頭 → 検索する文字列で始まっているデータが表示

category: Access フォーム

tb: 0   cm: 0

Access フォームのコマンドボタン  

コマンドボタン ウィザードで作成
フォームに貼り付けるコマンドボタンに基本的な動作を簡単に登録できる方法がウィザードによる作成です。

Access 2003 の場合、実際に作成されるのはコマンドボタンのクリック時のイベントプロシージャで、AccessがVBAのコードを自動生成します。

Access 2007 以降の場合はコマンドボタンのクリック時の埋め込みマクロとして生成されます。この埋め込みマクロはナビゲーションウィンドウにオブジェクトとして表示されません。


自前で作る場合の例

フォームを開く
Private Sub コマンド1_Click()
On Error GoTo Err_LABEL

DoCmd.OpenForm "F_Shain"

Exit_LABEL:
Exit Sub

Err_LABEL:
MsgBox (Err.Number & "," & Err.Description)
Resume Exit_LABEL

End Sub


メニュー画面を閉じ、Accessを終了
Private Sub コマンド3_Click()
On Error GoTo Err_LABEL

DoCmd.Close
DoCmd.Quit

Exit_LABEL:
Exit Sub

Err_LABEL:
MsgBox (Err.Number & "," & Err.Description)
Resume Exit_LABEL

End Sub

category: Access フォーム

tb: 0   cm: 0

Access フォームの設計  

フォームの種類

単票形式
1レコードが1画面で表示され項目が多い時などは見やすい。

表形式
行列形式で高さ・幅などをデザインできる。全体を見渡しやすいが、項目が多いと「横スクロール」が発生する。

データシート
単票形式のフォームがデータシートビューで表示される。

帳票形式(Access 2007以降)
1画面に複数レコードが表示されます。


設計で考慮すること
複数のフォームを同時に開くとユーザーも作業しにくいですし、またプログラムの設計も複雑になります。そこで、かならず作業できるウィンドウは1つにする必要があります。これを実現するのがフォームのポップアップと作業ウィンドウ固定 プロパティです。

作業ウィンドウ固定 プロパティはフォームをモーダルウィンドウとして開くかどうかを示します。規定値は[いいえ]です。
フォームをモーダル ウィンドウとして開いた場合は、フォーカスを別のオブジェクトに移動する前に、ウィンドウを閉じる必要があります。また、そのフォームを閉じるまで、他のウィンドウは無効になります。他のアプリケーションのウィンドウに切り替えることはできます。他のウィンドウだけでなく、メニューとツールバーも無効にするには、"Modal/作業ウィンドウ固定" と "PopUp/ポップアップ" プロパティの両方を [Yes/はい] に設定します。

独自のダイアログボックス の作成
クエリまたはレポートの生成条件を入力するなどの独自のダイアログ ボックスを作成するには以下の設定をします。
"Modal/作業ウィンドウ固定"→はい
"PopUp/ポップアップ"→はい
 "BorderStyle/境界線スタイル"→ダイアログ

メインメニューから開くフォームを作成する。
以下の記事を参考にしてください。
dxr165.blog.fc2.com/blog-entry-81.html

category: Access フォーム

tb: 0   cm: 0

Access フォームで表示されているレコードのみ印刷する  

最終更新日:2012/10/07
フォームで現在表示されているレコードのみレポートで印刷するコマンドボタンを作成する。

例 社員マスタ 検索の単票フォームで現在、社員コードのテキストボックスに表示させている社員コードのレコードのみ、社員情報リスト(1ページがフォームの1画面分のレポート:社員)を印刷したい。社員マスタの主キーは社員コード

簡単なやり方
コマンドボタンウィザードで種類:レポートの操作、ボタンの動作:レポートの印刷を選択し、イベントプロシージャを作成し、エディタでDoCmd.OpenReportの記述をつぎのように手直しする。

DoCmd.OpenReport "社員" , acViewNormal , , "[社員コード] =" & Me![社員コード]

ポイント & 解説 
Where 句はレポートを開く前にこのレポートのレコードソースの絞り込み条件として利用される。
 Me!社員コードはこのフォームで現在表示しているテキストボックスの値を参照することが出来る。
Where 句の左辺は開くレポートのレコードソースのフィールド名を指定します。
この場合、社員コードのデータ型は数値型です。
もし、社員コードがテキスト型であれば、
"[社員コード] =" & "'" & Me![社員コード] & "'" と変数をシングルクォーテーションでサンドウィッチにします。なんでこうしないといけなないのかは「Where 句は文字列として指定」するからです。文字列の中でここから文字列が始まる終わるをAccess にわかってもらうために宣言するのがシングルクォーテーションなのです。ちなみに、上記の例で社員コードは数値型ですが、& 演算子により数値を文字列に変換されています。

Access では何をするにしても「このフィールドのデータ型は何か」を意識していないといけません。

つぎに、
Where 句の中の変数 Me![社員コード] についてです。この部分はフォームの社員コード テキストボックス(テキストボックスの名前は社員コード)に表示されている値が参照されます。レコードを移動すれば当然値が変化します。しかし、それには前提があります。そのテキストボックスのコントロールソースがそのフォームのレコードソースになっているテーブル、クエリ、SQLのフィールド名が設定されている必要があります。

Me![社員コード] は規定値の部分が省略して記述されていて、本来は Me.Controls![社員コード].Value と記述されます。使用頻度が高そうなものが規定値になっているようです。また、省略して記述する方がコードの実行が早い場合があるそうです。

Me.Controls![社員コード].Value のMe はこのコマンドボタンが張り付いているフォームオブジェクトを意味します。自身のフォームにあるテキストボックスやコンボボックスなどのコントロールのコレクションの中の「社員コード」を操作の対象にし、Value プロパティ(テキストボックスに格納されている値)を参照するという意味合いです。

また、フィールド名やオブジェクト名は半角の[]でサンドウィッチにします。スペース交じりのフィールド名やオブジェクト名を使うとき以外は[]はなくてもよいようですが、明示的に常に[]を使った方がいいようです。

このMe!社員コード の部分の記述ではほかにMe.社員コード のようにビックリマークではなくピリオドで書く場合もあります。どう違うのでしょうか?。結論を先にいうと「ビックリマーク」の方が確実にコントロールを参照するので無難ということになると思われます。

構文的には
[A]![B]はBがコレクションA の構成要素を意味する。
[A].[B]はB がA の直属の下位要素を意味します。

フォームとレポートではレコードソースになっているテーブル、クエリ、SQLのフィールドの値を操作できるAccessField という変数のようなものが存在するようです。(ただし、レポートではAccessField は存在しますが、VBA やマクロからは参照できないようです。) 
まず、レコードソースになっているテーブル、クエリ、SQLのフィールド名と同じ名前の AccessField が作成されフォームまたはレポートのプロパティのメンバとして顔を出してきます。つぎに、同じコントロール(あくまでも名前だけです、コントロールソースの設定は関係ありません)が存在するとコントロールとして参照されます。
Me.社員コード のようにピリオドを使うと、意図せずAccessField を参照してしまい、予期せぬ結果を発生させてしまう可能性があるようです。

フォームまたはレポートでレコードソースのカレントレコードの値を参照したい場合は、フォームまたはレポートのセクションに連結フィールドを置き、その連結フィールドを参照する方法がAccessField を参照するより安全、確実のようです。

category: Access フォーム

tb: 0   cm: 0

プロフィール

最新コメント

カウンター(2012/3/10以降)