Accessテクニックのホームへ戻る

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

 

データシートのカラム順を選択する

 

データシートに表示する列(カラム)の順番を選択します。メインフォームが表示されたら、列1~列6のコンボボックスから得意先テーブルのフィールドを選択します。[表示]ボタンをクリックすると、サブフォームのデータシートにコンボボックスから選択した順番に列が表示されます。

 

 

1. 新規データベース作成

Accessを起動したら、ツールバーから新規作成のアイコンをクリックして、作業フォルダworkW113.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

 

ダウンロード (113.lzh)