【Wordマクロ】Wordのリストボックスでは.ColumnHeadsを使えない | みんなのワードマクロ

みんなのワードマクロ

ワードマクロで、文書作成とオフィス事務を効率化!!

Excel マクロでユーザーフォームを作り、リストボックスに情報を表示した場合、列の項目名を列挙させることができます。

例えばこんな感じ。


みんなのワードマクロ

元のデータはこんな感じです。スポーツ店の売上データです。
勝手に作りました。全くバリエーションがありません(笑)。


みんなのワードマクロ


リストをスクロールさせても項目名が表示されるので便利ですね。

結論ですが、Word マクロで同じことをしようとしてもできません。



【理由】

上記のようにリストボックスに列の項目名を表示させるためには、リストボックスのプロパティで .ColumnHeads = True として、データを RowSource プロパティで参照します。

配列をそのままリストボックスに入れるだけでは、.ColumnHeads = True としても最初に空の行が表示されるだけです。

例えば、以下のようにListプロパティでデータを参照した場合には、1行目が空欄になっています。

みんなのワードマクロ


Excelマクロでは、データを RowSource プロパティで参照できますから、列の項目名をリストボックスの1行目に列挙できます。

これはかなり便利な機能ですよね。

しかし、Wordのリストボックスにてデータを参照する場合(たとえば、WordからExcelを起動して特定ファイルのセルを参照する場合)、RowSourceプロパティを使うことができません。結果、Wordでは項目名を表示できないのです。残念!!

Listプロパティを使えばデータの取得はできますよ。



【参考マクロ】

Excelのサンプルマクロです。

RowSourceプロパティ にてデータを参照する場合
→項目名が表示されます。

Private Sub UserForm_Initialize()

 With Me.ListBox1
  .ColumnCount = 4
  .ColumnWidths = "100;50;30;50"
  .RowSource = "A2:D11"
  .ColumnHeads = True
 End With
 
End Sub


Listプロパティにてデータを参照する場合
→項目名が表示されません。

Private Sub UserForm_Initialize()

 With Me.ListBox1
  .ColumnCount = 4
  .ColumnWidths = "100;50;30;50"
  .List = Range("A2:D11").Value
  .ColumnHeads = True
 End With
 
End Sub



▼関連記事

ユーザーフォームを表示したまま文書を編集

How do you set the column heads for a combobox?