プロが教える店舗&オフィスのセキュリティ対策術

WinXP(sp3) EXCEL2003
いつも本当にお世話になっております。
また、1つ教えていただきたいのですが、ユーザーフォームのリストボックよりデータ取得で、必ずクリック(選択)
しなければ、エラーになると思うのですが、ここを選ばない場合は、1行目選択としたいのですが、
どうもうまくいきません。

どなたかご教授いただけないでしょうか?

いかにコードを転記いたします。

Private Sub CommandButton1_Click()
gy = UserForm.ListBox1.ListIndex

If gy = -1 Then
MsgBox "1行目選択"
Worksheets("データ入力シート").Cells(1, 2).Value = ListBox1.List(2, 35)←ここで実行時エラー381
Else                                          Listプロパティの値を取得で                                            きません。プロパティのインデッ                                             クスの配列が無効ですと                                              なります。  

Worksheets("データ入力シート").Cells(1, 2).Value = ListBox1.List(ListBox1.ListIndex, 35)

End If
Unload Me

End Sub

A 回答 (2件)

ListBox1.List(2, 35)..というのは 1行目ではなくて List の 3行目36列ですが、その点は大丈夫ですか?


1行目は ListBox1.List(0, 35) です。

help<引用>
設定値
行および列は、0 から番号が付けられます。つまり、リストの 1 行目の行番号と 1 列目の列番号は 0 となり、2 行目と 2 列目の番号は 1 となります。以下同様に続きます。
</引用>

Listの行が2行しかないのに、List(2, xx)つまり3行目を指定すると 381エラーになります。
Listの設定値の中身を確認してください。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございました。
列のほうは、0からスタートで数えていましたが、行の方をついうっかり失念しておりました。

本当にありがとうございました。

お礼日時:2012/08/29 09:30

>必ずクリック(選択)しなければ、エラーになると思うのですが、


通常は、選択していない事を知らせるか、なにもせずに終わらせるかだと思うのですが
Private Sub CommandButton1_Click()
  If Me.ListBox1.ListIndex = -1 Then
    MsgBox "選択されていません"
  Else
    MsgBox Me.ListBox1.Column(4)
    Worksheets("データ入力シート").Cells(1, 2).Value = Me.ListBox1.Column(35)
  End If
  Unload Me
End Sub

この回答への補足

ご指摘ありがとうございます。
ただNo.1の方の御指摘で、プログラムし直したところ正常にうごいております。
ただし、検証は、EXCEL2010にてなので、単にうまく動いているように見えるだけなのかは、自信をもってだんげんできませんが、・・・

ただ論理的に言うと、リストをクリックされていないときのINDEXの値は-1でクリックされた
ときに、その行の値を返す(正確にいうと、INDEX_No.を返すなら、条件にINDEXNo.が-1の時
無理やり、アドレス(この場合、(0,35))にしてしまえばいいかなとおもったのですが、

間違いでしょうか?

補足日時:2012/08/29 19:21
    • good
    • 0

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