dポイントプレゼントキャンペーン実施中!

ExcelのVBAを使用して、コンボボックスを表示しています。

With Sheets("Sheet1").cb型式
.List = Sheets("マスタ").Range("A2:A" & LastRow).Value
End With

指定した範囲内に多くののデータが保存されていれば問題ないのですが、
最低限のデータしかなければ、LastRowが「2」となり下記のようなエラー
が表示されます。

実行時エラー '381':
List プロパティを設定できません。プロパティの配列のインデックスが
不正です。

指定した範囲が、「A2:A2」となるのが原因だと思うのですが、回避する
方法はありませんでしょうか?
(LastRow+1とする方法もありますが、コンボボックスの一番したに空白
ができてしまうため、これ以外の方法を検討しています。)

よろしくお願いします。

A 回答 (3件)

していることが多少分からない点があるのですが、たぶん、コントロールツールのコンボボックスだとして、List プロパティは配列を入れるためですから、



.List = 配列
で、代入式が配列になっていないからエラーになるのではありませんか?

With Sheets("Sheet1").cb型式
  .ListFillRange = Sheets("マスタ").Range("A2:A" & LastRow).Address
End With

のようにすればよいのではありませんか?

この回答への補足

下記のようにしたら、うまく動作しました。

.ListFillRange = "マスタ!A2:A" & LastRow

補足日時:2005/06/24 11:04
    • good
    • 0
この回答へのお礼

ありがとうございます。

試してみましたが、「マスタ」シートの範囲ではなく、「Sheet1」シート
の範囲が表示されてしまいます。

なぜでしょう?

お礼日時:2005/06/24 10:59

一応、もうこちらは読まないかもしれませんが、別の場所で、私の書き込みを読み落とされたようなので、念のために書いておきますが、



With Sheets("Sheet1").cb型式
  .ListFillRange = Sheets("マスタ").Range("A2:A" & LastRow).Address
End With

「cb型式」の部分を、サブルーチンで、引数に取りたい時は、

With Sheets("Sheet1").Shapes.("cb型式").DrawingObject

とします。このような方法を使うか使わないかは、ご自由です。
    • good
    • 0

level30さん、Wendy02 です。



With Sheets("Sheet1").cb型式
  .ListFillRange = Sheets("マスタ").Range("A2:A" & LastRow).Address
End With

>試してみましたが、「マスタ」シートの範囲ではなく、「Sheet1」シート
>の範囲が表示されてしまいます。

そのとおりですね。
Sheets("マスタ").Range("A2:A" & LastRow).Address
これでは、単に、Range("A2:A" & LastRow).Address のアドレスと同じことでした。
シート名が入っていませんね。

.ListFillRange  = "マスタ!" & Range("A2:A" & LastRow).Address
か、
.ListFillRange = "マスタ!A2:A" & LastRow
ですね。

失礼しました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A