■ データシートのカラム位置を変更する (2002,2003,2007)

図 データシートのカラム順を選択する
データシートに表示する列(カラム)の順番を選択します。メインフォームが表示されたら、列1~列6のコンボボックスから得意先テーブルのフィールドを選択します。[表示]ボタンをクリックすると、サブフォームのデータシートにコンボボックスから選択した順番に列が表示されます。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkにW113.mdbを作成します。
2. テーブル、クエリをインポート
Windowsのエクスプローラから、113.mdb(このページの最後からダウンロードできます)をダブルクリックして開きます。データベースウィンドウのオブジェクトから[テーブル]をクリックしたら、得意先テーブル(tblCustomers)をドラッグしてW113.mdbのデータベースウィンドウにドロップします。同様の手順で、得意先クエリ(qryCustomers)をドラッグ&ドロップします。テーブル、クエリをインポートしたら、113.mdbを閉じます。
3. サブフォーム作成
データベースウィンドウのオブジェクトから[フォーム]を選択したら、[新規作成]ボタンをクリックします。「新しいフォーム」のダイアログが表示されたらリストボックスから[オートフォーム:データシート]を選択します。基になるテーブルまたはクエリの選択から[qryCustomers]を選択します。[OK]ボタンをクリックしてダイアログを閉じます。
ツールバーから上書き保存のアイコン
をクリックして「fsubCustomers」の名称で保存したら、閉じるボタン
をクリックします。

図 得意先テーブルのサブフォームを作成したら「fsubCustomers」の名称で保存する
4. メインフォーム作成
データベースウィンドウのオブジェクトから[フォーム]を選択したら、新規オブジェクトのショートカットから「デザインビューでフォームを作成する」をダブルクリックします。メニューバーから[表示]→[フォームヘッダー/フッター]を選択します。フォームのデザインビューにフォームヘッダーとフォームフッターが表示されたら、フォームフッターの高さを0にします。
5. コンボボックスとコマンドボタン作成
フォームのデザインビューが表示されたら、ツールボックスのコントロールウィザードのアイコン
をクリックして、コントロールウィザードを無効にします。ツールボックスからコンボボックスのアイコン
をクリックしたら、フォームヘッダーにドラッグします。同様の手順で合計6個のコンボボックスを作成したら、縦3行と横2列に並べ替えます。ツールボックスからコマンドボタンのアイコン
をクリックしたら、フォームヘッダーにドラッグします。フォームヘッダーに作成したコントロールをダブルクリックしてプロパティウィンドウを表示したら、表のように設定します。

図 フォームヘッダーにコンボボックスとコマンドボタン作成
表 フォームヘッダーに作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|
コンボボックス1 (列1) |
名前 |
cboColumn1 |
|
値集合タイプ |
値リスト |
|
|
列数 |
2 |
|
|
列幅 |
0cm |
|
|
コンボボックス2 (列2) |
名前 |
cboColumn2 |
|
値集合タイプ |
値リスト |
|
|
列数 |
2 |
|
|
列幅 |
0cm |
|
|
コンボボックス3 (列3) |
名前 |
cboColumn3 |
|
値集合タイプ |
値リスト |
|
|
列数 |
2 |
|
|
列幅 |
0cm |
|
|
コンボボックス4 (列4) |
名前 |
cboColumn4 |
|
値集合タイプ |
値リスト |
|
|
列数 |
2 |
|
|
列幅 |
0cm |
|
|
コンボボックス5 (列5) |
名前 |
cboColumn5 |
|
値集合タイプ |
値リスト |
|
|
列数 |
2 |
|
|
列幅 |
0cm |
|
|
コンボボックス6 (列6) |
名前 |
cboColumn6 |
|
値集合タイプ |
値リスト |
|
|
列数 |
2 |
|
|
列幅 |
0cm |
|
|
コマンドボタン |
名前 |
cmdView |
|
標題 |
表 示 |
6. メインフォームにサブフォームを貼り付ける
データベースウィンドウからサブフォーム[fsubCustomers]をドラッグしたら、フォームの詳細セクションにドロップします。

図 メインフォームの詳細セクションにサブフォームをドラッグ&ドロップする
7. コードビューに切り替え
ツールバーからコードのアイコン
をクリックしてVBE(Visual Basic Editor)を表示します。コードビューが表示されたら、オブジェクトのドロップダウンリストから[Form]を選択します。フォームのOnLoadイベントが生成されたら、次のコードを追加します。
Private Sub Form_Load()
FillList Me.cboColumn1
FillList Me.cboColumn2
FillList Me.cboColumn3
FillList Me.cboColumn4
FillList Me.cboColumn5
FillList Me.cboColumn6
End Sub
コードビューのオブジェクトのドロップダウンリストから[cmdView]を選択します。コマンドボタンのOnClickイベントが生成されたら、次のコードを追加します。
Private Sub cmdView_Click()
Dim fsub As Access.SubForm
Dim cbo As Access.ComboBox
Dim ctl As Access.Control
Dim strCtlName As String
Dim intI As Integer
Const acSizeToFit = -2
Set fsub = Me.fsubCustomers
For Each ctl In fsub.Form.Controls
If ctl.ControlType <> acLabel Then
ctl.ColumnHidden = True
End If
Next
For intI = 1 To 6
Set cbo = Me("cboColumn" & intI)
strCtlName = Nz(cbo.Value, "")
If Len(strCtlName) Then
fsub.Form(strCtlName).ColumnOrder = intI
fsub.Form(strCtlName).ColumnWidth = acSizeToFit
fsub.Form(strCtlName).ColumnHidden = False
End If
Next
End Sub
フォームのクラスモジュールの最後に、サブプロシージャFillListを追加します。
Private Sub FillList(cbo As Access.ComboBox)
With cbo
.AddItem Item:="CustomerID;得意先ID"
.AddItem Item:="CompanyName;得意先名"
.AddItem Item:="ContactName;担当者名"
.AddItem Item:="ContactTitle;部署役職"
.AddItem Item:="Phone;電話番号"
.AddItem Item:="Ken;都道府県"
End With
End Sub
8. メインフォームを開く
VBEのツールバーから表示(Access)のアイコン
をクリックして、Accessのウィンドウに切り替えます。Accessのツールバーからフォームビューのアイコン
をクリックしてメインフォームを開きます。メインフォームの列1のコンボボックスから[得意先名]、列2のコンボボックスから[部署役職]、列3のコンボボックスから[担当者名]を選択します。最後に[表示]ボタンをクリックすると、サブフォームのデータシート上にコンボボックスから選択した列が順番に表示されます。

図 データシートに得意先名、部署役職、担当者名の列順で表示した例
●解説
データシートの列順を並べ替えるには、列のテキストボックスのColumnOrderプロパティに列の表示順を設定します。このサンプルでは、[表示]ボタンのOnClickイベントで列のコンボボックスにフィールドが選択されているか調べて、データシートのColumnOrderプロパティに表示順を設定します。
Private Sub cmdView_Click()
Dim fsub As Access.SubForm
Dim cbo As Access.ComboBox
Dim ctl As Access.Control
Dim strCtlName As String
Dim intI As Integer
Const acSizeToFit = -2
Set fsub = Me.fsubCustomers ‘ サブフォームのオブジェクト取得
For Each ctl In fsub.Form.Controls
If ctl.ControlType <> acLabel Then
ctl.ColumnHidden = True ‘ データシートの列を非表示に初期化する
End If
Next
For intI = 1 To 6
Set cbo = Me("cboColumn" & intI) ' 列のコンボボックス(cboColumn1-6)のコントロール取得
strCtlName = Nz(cbo.Value, "") ‘ コンボボックスの値取得
If Len(strCtlName) Then ‘ コンボボックスからフィールドが選択されているとき以下の処理を行う
fsub.Form(strCtlName).ColumnOrder = intI ‘ データシートの列表示順設定
fsub.Form(strCtlName).ColumnWidth = acSizeToFit ‘ データシートの列幅自動調整
fsub.Form(strCtlName).ColumnHidden = False ‘ データシートの列を表示する
End If
Next
End Sub