[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA実行時エラー380Listプロパティを設定できません。プロパティの値が無効です。』(ゆうな)
フォームを表示したとき登録済みのデータをリストボックスに表示させる。
H列に1が入力されているときは表示させない。(削除行のため)
.List(.ListCount - 1, 9) = Cells(i, 10).Valueまでは大丈夫なのに
なぜか.List(.ListCount - 1, 10) = Cells(i, 11).Value以降はエラーになります。
どうしてでしょうか。
Private Sub UserForm_Initialize()
'初期化処理
Worksheets("顧客マスタ").Activate
'リストボックスの設定 With lstCustomer .Font.Size = 10 .ColumnCount = 14 .ColumnWidths = "40;90;100;50;20;150;60;40;60;40;40;40;40;40" .TextAlign = fmTextAlignLeft .Font.Name = "MS ゴシック"
Dim i As Integer Dim LastRow As Integer LastRow = Range("A65536").End(xlUp).Row For i = 2 To LastRow If Cells(i, 15).Value <> 1 Then .AddItem Cells(i, 1).Value .List(.ListCount - 1, 1) = Cells(i, 2).Value .List(.ListCount - 1, 2) = Cells(i, 3).Value .List(.ListCount - 1, 3) = Cells(i, 4).Value .List(.ListCount - 1, 4) = Cells(i, 5).Value .List(.ListCount - 1, 5) = Cells(i, 6).Value .List(.ListCount - 1, 6) = Cells(i, 7).Value .List(.ListCount - 1, 7) = Cells(i, 8).Value .List(.ListCount - 1, 8) = Cells(i, 9).Value .List(.ListCount - 1, 9) = Cells(i, 10).Value .List(.ListCount - 1, 10) = Cells(i, 11).Value .List(.ListCount - 1, 11) = Cells(i, 12).Value .List(.ListCount - 1, 12) = Cells(i, 13).Value .List(.ListCount - 1, 13) = Cells(i, 14).Value
End If Next End With End Sub
Private Sub btnEntry_Click()
If Not IsEntryData(Me) Then Exit Sub
'各テキストボックスの値をシートに転記 Dim TargetRow As Integer TargetRow = Range("A65536").End(xlUp).Offset(1).Row Range("A" & TargetRow).Value = TargetRow - 1 Range("B" & TargetRow).Value = txtDate.Text Range("C" & TargetRow).Value = txtArea.Text Range("D" & TargetRow).Value = txtBusiness.Text Range("E" & TargetRow).Value = cboCategory.Text Range("F" & TargetRow).Value = txtCustomName.Text Range("G" & TargetRow).Value = cboProgress.Text Range("H" & TargetRow).Value = txtCharge.Text Range("I" & TargetRow).Value = txtNext.Text Range("J" & TargetRow).Value = txtTime.Text Range("K" & TargetRow).Value = txtTEL.Text Range("L" & TargetRow).Value = txtNote.Text Range("M" & TargetRow).Value = txtURL.Text Range("N" & TargetRow).Value = txtEmail.Text
'リストボックスに追加 lstCustomer.AddItem TargetRow - 1 lstCustomer.List(lstCustomer.ListCount - 1, 1) = txtDate.Text lstCustomer.List(lstCustomer.ListCount - 1, 2) = txtArea.Text lstCustomer.List(lstCustomer.ListCount - 1, 3) = txtBusiness.Text lstCustomer.List(lstCustomer.ListCount - 1, 4) = cboCategory.Text lstCustomer.List(lstCustomer.ListCount - 1, 5) = txtCustomName.Text lstCustomer.List(lstCustomer.ListCount - 1, 6) = cboProgress.Text lstCustomer.List(lstCustomer.ListCount - 1, 7) = txtCharge.Text lstCustomer.List(lstCustomer.ListCount - 1, 8) = txtNext.Text lstCustomer.List(lstCustomer.ListCount - 1, 9) = txtTime.Text lstCustomer.List(lstCustomer.ListCount - 1, 10) = txtTEL.Text lstCustomer.List(lstCustomer.ListCount - 1, 11) = txtNote.Text lstCustomer.List(lstCustomer.ListCount - 1, 12) = txtURL.Text lstCustomer.List(lstCustomer.ListCount - 1, 13) = txtEmail.Text
'コントロールのクリア txtDate.Text = "" txtArea.Text = "" txtBusiness.Text = "" cboCategory.Text = "" txtCustomName.Text = "" cboProgress.Text = "" txtCharge.Text = "" txtNext.Text = "" txtTime.Text = "" txtTEL.Text = "" txtNote.Text = "" txtURL.Text = "" txtEmail.Text = ""
End Sub
こちらも同じくlstCustomer.List(lstCustomer.ListCount - 1, 10) = txtTEL.TextのところでListプロパティを設定できません。プロパティの値が無効です。とでるのです。
どうしたらいいでしょうか
AddItemではColumnは10までしか処理できないはずです。 一旦配列に取得して、配列を拡張して値を挿入し再度表示させる。 例(未検証)
Dim a(), x As Long a = Me.lstCustomer.Column ReDim Preserve a(UBound(a, 1), UBound(a, 2) + 1) x = UBound(a, 2) With Me a(0, x) = .txtDate.Text a(1, x) = .txtArea.Text a(2, x) = .txtBusiness.Text a(3, x) = .boCategory.Text a(4, x) = .txtCustomName.Text a(5, x) = .cboProgress.Text a(6, x) = .txtCharge.Text a(7, x) = .txtNext.Text a(8, x) = .txtTime.Text a(9, x) = .txtTEL.Text a(10, x) = .txtNote.Text a(11, x) = .txtURL.Text a(12, x) = .txtEmail.Tex .lstCustomer.Column = a End With (seiya)
Dim i As Integer Dim LastRow As Integer LastRow = Range("A65536").End(xlUp).Row For i = 2 To LastRow If Cells(i, 15).Value <> 1 Then
Dim a(), x As Long a = Me.lstCustomer.Column ReDim Preserve a(UBound(a, 1), UBound(a, 2) + 1) x = UBound(a, 2) With Me a(0, x) = .txtDate.Text a(1, x) = .txtArea.Text a(2, x) = .txtBusiness.Text a(3, x) = .cboCategory.Text a(4, x) = .txtCustomName.Text a(5, x) = .cboProgress.Text a(6, x) = .txtCharge.Text a(7, x) = .txtNext.Text a(8, x) = .txtTime.Text a(9, x) = .txtTEL.Text a(10, x) = .txtNote.Text a(11, x) = .txtURL.Text a(12, x) = .txtEmail.Text .lstCustomer.Column = a End With
それで
a(11, x) = .txtURL.Text までいくと 実行時エラー9 インデックスが有効範囲にありません となってしまいました。 私がとんちんかんなことをしているのでしょうか? とにかく本を読んでやってみたという状態なので 教えていただいていることもすっきり理解できた! とはいかないような状態で。。。すいません。 (ゆうな)
Debug Window が表示された状態で(エラー発生時) UBound(a,1)の値を読んでもらえますか? カーソルをUbound(a,1)の上に移動するとポップアップが表示されるとおもうのですが? (seiya)
OKです
投稿された最初のコードから、私が理解した内容は
1) lstCustomerには、予め13列のリストが表示されている。 2) そのリストの最下行に一行挿入してリストを拡張する。
どこか違いますか?
違う場合は、何をどのようにしたいのか詳しく説明してください。 (seiya)
本当にこんな質問に付き合っていただいてありがとうございます。
ええと、
1)lstCustomerのリストボックスには14列のリストを表示したいのですが、エラーで出てきません。
2)そのリストの最下行に1行挿入して新しく登録したデータを表示させる。
です。
お忙しい中すいません。
(ゆうな)
1) UserForm moduleに追加
Private Sub UserForm_Initialize() With Me.lstCustomer .List = Range("a2", Range("a" & Rows.Count).End(xlUp)).Resize(, 13).Value .ColumnCount = 13 End With End Sub
2) CommandButton1を追加して、下記コードをUserForm moduleに挿入
Private Sub CommandButton1_Click() Dim a(), x As Long a = Me.lstCustomer.Column ReDim Preserve a(UBound(a, 1), UBound(a, 2) + 1) x = UBound(a, 2) With Me a(0, x) = .txtDate.Text a(1, x) = .txtArea.Text a(2, x) = .txtBusiness.Text a(3, x) = .boCategory.Text a(4, x) = .txtCustomName.Text a(5, x) = .cboProgress.Text a(6, x) = .txtCharge.Text a(7, x) = .txtNext.Text a(8, x) = .txtTime.Text a(9, x) = .txtTEL.Text a(10, x) = .txtNote.Text a(11, x) = .txtURL.Text a(12, x) = .txtEmail.Tex .lstCustomer.Column = a End With End Sub
これで試してください。 (seiya)
ご自分で解明してみてください。 解らない部分は質問すれば、誰か(私も含めて)が回答してくれますから。 (seiya)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.