Visual Basicユ―ザーのための Accessプログラミングソリューション

Access97 Tips集 part 4


秋月 巌 AKIZUKI,Iwao


Accessではフォームとデータが密接に関連付けられています.というのは,Accessにおいて,フォームはデータを表示するための最も有効な手段だからです.そのため,フォームの表示方法やスタイルについて多くのオプションを用意しています.
今回はフォームを表示するテクニックを中心に説明します.フォームとデータを自在に操ることで,より柔軟にデータを表現することが可能です.


●設計時にフォームを選択する

図1:設計時にフォームを選択
 フォームを設計モードでオープンすると,初期の状態はフォームを選択した状態です.しかし,Visual Basicとは違って,一度,他のコントロールなどにフォーカスを移動すると,フォームのコントロールがない部分をクリックしてもフォームは選択されません.
 設計時にフォームを選択するには,フォームの左上の四角をマウスでクリックします.選択されると四角の中が黒くなります.「編集」メニューから「フォーム全体の選択」を選ぶ方法もあります.


●コントロールメニューのないフォームを使う

図2:Accessフォームのコントロールメニュー
Accessが提供するデフォルトのフォームには,コントロールメニューが用意されています(図2).


図3:「コントロールボックス」プロパティ
コントロールメニューのないフォームを作成するには,設計時に「コントロールボックス(ControlBox)」プロパティに「いいえ(False)」を設定します(図3).


図4:コントロールメニューのないフォーム
実行するとコントロールメニューと最大/最小化ボタンのないフォームが表示されます(図4).

 このプロパティをコードで実行しようとするとエラーが発生します.なぜなら,設計時のみ設定が可能なプロパティだからです.この制限を回避するには,対象となるフォームをデザインモードでオープンしてから,ControlBoxプロパティをFalseに設定してフォームを表示します(図5).

Private Sub Command1_Click()
    DoCmd.OpenForm "Sample1", acDesign
    Forms!Sample1.ControlBox = False
    DoCmd.OpenForm "Sample1"
End Sub

図5:コードでControlBoxプロパティを表示して実行



●フォームに最大化・最小化ボタンを表示しないようにする

 「最大化/最小化」ボタンのないフォームを作成するには, MinMaxButtonsプロパティを操作します.このプロパティも設計時の変更のみ認められているので,設定するには設計モードでフォームを開く必要があります(図6).

Private Sub Command1_Click()
    DoCmd.OpenForm "Syohin", acDesign
    Forms!Syohin.MinMaxButtons = 0
    DoCmd.OpenForm "Syohin"
End Sub


 MinMaxButtonsプロパティに設定できる値は表1の通りです.

表1:MinMaxButtonsプロパティの設定値一覧
プロパティシートでの値 内容
なし 表示しない 0
最小化ボタンのみ [最小化] ボタンのみを表示 1
最大化ボタンのみ [最大化] ボタンのみを表示 2
最小化/最大化ボタン [最小化] ボタンと [最大化] ボタンの両方を表示 3


図6:「最大化/最小化」ボタンのないフォームを表示


●フォーム表示時にカスタムメニューバーを表示する

 デフォルト以外のカスタムメニューバーを使用するには,使用するメニューを事前にAccessで作成する必要があります.
 カスタムメニューを作成するには「表示」メニューの「ツールバー」-「ユーザー設定」を選択します.現れたダイアログボックスの「新規作成」ボタンをクリックして,「新しいツールバー」ダイアログにメニューの名前「新しいメニューバー」を入力します(図7).

図7:新しいメニューバーの作成


 作成された新しいメニューバー(図8)にアイテムを登録するには,「ユーザー設定」ダイアログから「コマンド」タブを選択します(図9).必要に機能を持ったアイテムをマウスで選択し,カスタムメニューバーにドラッグアンドドロップします(図10).



図8:まだ何も登録されていないカスタムメニューバー
図9:アイテムをカスタムメニューバーにドラッグアンドドロップする
図10:アイテムの登録されたカスタムメニューバー




 「新しいメニューバー」メニューを表示するにはMenuBarプロパティにメニューバーの名前を設定します(図11).

Private Sub Form_Load()
    Me.MenuBar = "新しいメニューバー"
End Sub


図11:カスタムメニューバーを表示


●フォームに表示しているデータにフィルタをかける

 フォームに連結しているデータにフィルタをかけて表示するには,RecordSourceプロパティに条件つきのSQLをセットする方法もありますが,Filterプロパティを利用する方法もあります.フィルタを有効にするには,まずFilterプロパティに条件式を設定し,それを有効にするためにFilterOnプロパティをTrueにします.

Private Sub CommandButton_Click()
    Me.Filter = "category = 'チョコレート'"
    Me.FilterOn = True
End Sub


図12:フィルタの実行


●データシートビューで表示した項目の固定

 データシートビューはAccessが用意するフォームデータ表示スタイルのひとつです.フォームに連結されているデータをテーブルの形式で表示します.このスタイルは簡単にデータを表形式で表示できて便利なのですが,柔軟性があまりないのが欠点です.
 ここで紹介するのは一番左側の項目だけを「固定」にして,左右にスクロールしても表示されたままにする方法です.これを実装するためにフォームのLoadイベントプロシージャに処理を記述しています.DoCmdオブジェクトのRunCommandメソッドはAccessのメニューで行なう操作の多くをシミュレートします.メソッドの引数に渡す値で,どの処理を行なうか決定します.
 プロシージャで指定している定数acCmdFreezeColumnは,図13のメニュー操作をプログラムコードで実行します.これにより右下のスクロールバーで左右にスクロールしても一番左側の項目は固定したまま移動しません(図14).

Private Sub Form_Load()
    DoCmd.RunCommand acCmdFreezeColumn
End Sub


図13:「列の固定(acCmdFreezeColumn)」をメニューで指定


図14:スクロールしても「商品コード」項目は移動しない


 FormオブジェクトのFrozenColumnsプロパティは,固定している列の数を取得することが可能です.レコードセレクタの列は常に固定した状態なのでこのプロパティの既定値は「1」になります.したがって,FrozenColumns プロパティは,1つの列を固定すると「2」に設定されます.



●フォームのデータシートビューで列を非表示にするには

 データシート形式で表示しているときに特定の項目を非表示にすることも可能です. ColumnHiddenプロパティをTrueに設定することで,表示されなくなります.
 この例では,用意された「syohin_code」「syohin_mei」「furigana」「kouri_kakaku」項目のうち,「furigana」項目を非表示にしています.

Private Sub Form_Load()
    Me.furigana.ColumnHidden = True
End Sub


図15:4つの項目がフォームには指定されている


図16:「furigana」項目は表示されない

VB Magazine ライブラリ | Visual Basicコースホームページ
int21 ホームページ | PCDN ホームページ


PCDN LOGO