#561 | データシートフォームの列情報を列挙するには? | フォーム、VBA | |
VBAのプログラムを利用して、データシート形式で表示されているサブフォームからデータシートの各列の情報を取得する例です。 まず例として次のようなフォームを用意します。 次に、[実行]ボタンのクリック時イベントプロシージャに次のようなコードを記述します。 Private Sub cmd実行_Click() Dim ctl As Control For Each ctl In Me!frm売上明細_sub.Controls If ctl.ControlType <> acLabel Then 'コントロール名(列名) Debug.Print ctl.Name, '表示/非表示 Debug.Print ctl.ColumnHidden, '表示順序 Debug.Print ctl.ColumnOrder End If Next ctl End Sub ※ここでは「frm売上明細_sub」がサブフォームコントロールの名前となっています。 ※サブフォームにはラベルコントロールも配置されているため、「If ctl.ControlType <> acLabel Then」という文でそれを除外しています。 【注意】 ラベルコントロールとテキストボックスコントロール等がセットになっている場合、画面表示上の「列名」はラベルコントロールの方の「標題」プロパティやテキストボックスコントロールの方の「データシートの標題」プロパティの値が使われますので、必ずしも「ctl.Name」が列名とはなりません。ラベルの標題とテキストボックスの名前が異なっている場合、あるいは「データシートの標題」プロパティを設定している場合には、適宜プログラムを変える必要があります。 まず、そのままの状態で[実行]ボタンをクリックして、イミディエイトウィンドウの内容を確認します。 次に、「数量」の列を非表示にして実行してみます。 今度は「数量」列の「ColumnHidden」プロパティが”True”になっています。ちょっとややこしいですが、ColumnHiddenは”非表示のときにTrue”となります。 次に、データシート上で見出し部分をドラッグ&ドロップして、「商品名」の列を先頭に移動してから[実行]ボタンをクリックしてみます。 それによって「商品名」の「ColumnOrder」プロパティの値が”1”に変わっていることが分かります。デザインはまったく変えていませんので、このことから「ColumnOrder」によって、デザイン上のコントロールの配置順序やタブオーダーではなく、実行画面上の表示順序が取得できるということが分かります。 |
|||
|
Copyright © T'sWare All rights reserved |