#563 データシートの列幅をまとめて調整する方法 フォーム、VBA

データシート形式で表示されているフォームでは、列全体(列名部分)を右クリックして表示されるショートカットメニューから[列の幅]を選択すると、「列の幅」ダイアログが表示されます。
ショートカットメニューから[列の幅]を選択

「列の幅」ダイアログ

このダイアログでその列幅を変更することができますが、次の4種類の設定方法が可能です。
  • 数値を指定するとその幅に変わる
    数値を指定する

    その幅に変わる

  • 「0」を指定すると非表示になる
    列が非表示になる

  • [標準の幅]にチェックを付けると既定の幅になる
    [標準の幅]にチェックを付ける

    既定の幅になる

  • [自動調整]ボタンをクリックすると最適幅(データ内容がすべて表示される幅)になる
    最適幅になる

ここで、VBAを使って上記のような操作を行ういくつかの例を紹介します。

次のようなフォームを作って、[実行]ボタンのクリック時イベントプロシージャにいくつかのパターンでプログラムを記述します。なお、「frm売上明細_sub」はデータシート形式であるサブフォームコントロールの名前、「cmd実行」がボタンの名前です。
フォームの例


例1:「商品名」の列幅を10論理cmに設定する

Private Sub cmd実行_Click()

  Me!frm売上明細_sub!商品名.ColumnWidth = 10 * 567

End Sub


実行結果:
実行結果

コントロールの幅は通常は「Width/幅」プロパティを使って設定しますが、データシートビューでの列幅にはその値は反映されません。データシート上の幅には「ColumnWidth」プロパティを使います。

また、「ColumnWidth」プロパティをVBAから設定する場合は「twip」という単位を指定します。「1論理cmは567twip」ですので、上記はそれを掛け算しています。


例2:「商品名」の列を標準の幅(既定の幅)に設定する

Private Sub cmd実行_Click()

  Me!frm売上明細_sub!商品名.ColumnWidth = -1

End Sub


実行結果:
実行結果

既定の幅に設定するには、「ColumnWidthに-1を指定する」のがポイントです。


例3:すべての列を標準の幅(既定の幅)に設定する

Private Sub cmd実行_Click()

  Dim ctl As Control

  For Each ctl In Me!frm売上明細_sub.Controls
    If ctl.ControlType <> acLabel Then
      ctl.ColumnWidth = -1
    End If
  Next ctl

End Sub


実行結果:
実行前の列の状態クリック前

実行結果クリック後

※サブフォームにはラベルコントロールも配置されているため、「If ctl.ControlType <> acLabel Then」という文でそれを除外しています。


例4:すべての列の幅を最適幅に自動調整する

Private Sub cmd実行_Click()

  Dim ctl As Control

  For Each ctl In Me!frm売上明細_sub.Controls
    If ctl.ControlType <> acLabel Then
      ctl.ColumnWidth = -2
    End If
  Next ctl

End Sub


実行結果:
実行前の列の状態クリック前

実行結果クリック後

最適幅に自動調整するには、「ColumnWidthに-2を指定する」のがポイントです。
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved