- ベストアンサー
EXCELのユーザーフォームのリストについて
- ユーザーフォームのリストボックよりデータ取得で、必ずクリック(選択)しなければ、エラーになると思うのですが、ここを選ばない場合は、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
- EXCELのユーザーフォームのリストボックスからデータを取得する際に、リストボックスを選択しないとエラーが発生します。この場合、1行目を選択したいのですが、うまくいきません。
- みんなの回答 (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の設定値の中身を確認してください。
その他の回答 (1)
- watabe007
- ベストアンサー率62% (476/760)
>必ずクリック(選択)しなければ、エラーになると思うのですが、 通常は、選択していない事を知らせるか、なにもせずに終わらせるかだと思うのですが 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))にしてしまえばいいかなとおもったのですが、 間違いでしょうか?
お礼
ご指摘ありがとうございました。 列のほうは、0からスタートで数えていましたが、行の方をついうっかり失念しておりました。 本当にありがとうございました。