Excel VBA > VBA:実務活用 > 「RowSourceプロパティを設定できません。プロパティの値が無効です。」エラーについて
このエントリーをはてなブックマークに追加

「RowSourceプロパティを設定できません。プロパティの値が無効です。」エラーについて

リストボックスのRowsourceでエラーが発生

Excelで開発中に表題のエラーが発生しました。リストボックスはとてもよく使うコントロールで今回はExcelの仕様によりRowsourceプロパティでリストを表示するようにしていました。
上手くいっていたのがあるタイミングでNGになってしまいました。
listbox_list_property_error1_01

下記は備忘録的ですが説明します。
なお、例のごとくVBAでは実行時エラーで同じエラー内容を吐き出す場合があります。そのため今回の事象で解決できない場合もある点に注意してください。

原因は複数のブックだった

Rowsourceプロパティで「アクティブでないシート」のデータを表示するときに、「シート名!データ範囲」とする必要がありますが、実際にその通りに設定していました。
しかしそれでは複数のブックを開いてた場合に対処できず、今回のエラーが発生します。

絶対パス?的対応で回避

そこで絶対パスのような書き方で対処しました。
[ブック名]シート名!データ範囲

Private Sub UserForm_Activate()

    ‘———————————————
    ‘Book1のシート1のA1からD20をリストボックスに表示
    ‘———————————————
    Me.ListBox1.RowSource = “[Book1]Sheet1!A1:D20”

    ‘———————————————
    ‘変数を使って汎用的にする場合
    ‘———————————————
    With ThisWorkbook
        Me.ListBox1.RowSource = “[” & .Name & “]” & .Worksheets(1).Name & “!” & .Worksheets(1).Cells(1, 1).CurrentRegion.Address
    End With

    ‘———————————————
    ‘変数を使って汎用的にする場合2 見づらさを少し回避
    ‘———————————————
    Dim Wb As Workbook
    Dim Wsh As Worksheet

    Set Wb = ThisWorkbook
    Set Wsh = Wb.Worksheets(1)

    Me.ListBox1.RowSource = “[” & Wb.Name & “]” & Wsh.Name & “!” & Wsh.Cells(1, 1).CurrentRegion.Address

End Sub

カテゴリ:VBA:実務活用