Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


24160 / 76732 ←次へ | 前へ→

【57923】Re:テキストボックスに条件分岐で検索値を表示
発言  kanabun  - 08/9/21(日) 9:34 -

引用なし
パスワード
   ▼takeshi さん:こんにちは。

>すると、自分の思ったとおりに動きました!か、感動です!!
>
>10日くらい考えて、どうにもならずにあきらめかけてたので、感慨ひとしおです。

検証をどうも。


> もう一回、得意先名を変更しようとすると、エラーが出ます。

>「実行時エラー'381' Listプロパティの値を取得できません。プロパティの配列のインデックスが無効です。」と出ます。

>デバッグしてみると、
>
>Private Sub ComboBox2_Change()
> Dim i As Long, j As Long, Index As Long, lot As Long
>
> Index = ComboBox2.ListIndex
> With ComboBox3
>   .Clear
>   i = -1
>   For j = 1 To 6 Step 2
> →→→   lot = Val(ComboBox2.list(Index, j))
>     If lot > 0 Then
>       i = i + 1
>       .AddItem lot 'ロット(受注)数
>       .list(i, 1) = ComboBox2.list(Index, j + 1)
>     End If
>   Next
>   .ListIndex = i
> End With
>End Sub
>
>→の段が黄色反転しています。
>
>どうしたらいいのか、また迷っています。

再現しました。
え〜これはですね〜、(って、しばし時間稼ぎする ^^)//...^^)
> 得意先名を変更しようと
ですから、ComboBox1をクリックしたときの動作が関連しているわけですね。

> Private Sub ComboBox1_Change()
では、
  一度、リストをClear する、という処理をしています。↓
>  ComboBox2.Clear

これが起きると、ComboBox2_Changeイベントが発生するのです。
そして そこの先頭に
>  Index = ComboBox2.ListIndex
って書いてありますが、
ComboBox2.Clearしたときの ListIndex は -1 (何も選択されていない状態)
なので、変数Indexには -1 が代入され、
何のチェックもないので、そのまま
ComboBox2_Changeイベント 内の処理が実行され、

   For j = 1 To 6 Step 2
→→→   lot = Val(ComboBox2.list(Index, j))
                   ▲ここで、Index の値が -1 なので、
> 「実行時エラー'381' Listプロパティの値を取得できません。
> プロパティの配列のインデックスが無効です。」

となるわけです。

理由が分かったら、対処しましょう。
このばあい、ComboBox1_Change で ComboBox2.Clear していることが遠因ですが、
ComboBox2_Change()イベントは ユーザーがリストを選択したとき以外にも
起こるので、ListIndexの値が -1 だったら、後続処理をしないように
条件分岐すれば、問題解決です。


'' ComboBox2リストから製品名が選択されたら ロット(受注)数1,2,3
Private Sub ComboBox2_Change()
 Dim i As Long, j As Long, Index As Long, lot As Long
 
 Index = ComboBox2.ListIndex
 With ComboBox3
   .Clear
   If Index < 0 Then Exit Sub '★ この一行を挿入してください
   i = -1
   For j = 1 To 6 Step 2
     lot = Val(ComboBox2.List(Index, j))
     If lot > 0 Then
       i = i + 1
       .AddItem lot 'ロット(受注)数
       .List(i, 1) = ComboBox2.List(Index, j + 1)
     End If
   Next
   .ListIndex = i
 End With
End Sub
0 hits

【57882】テキストボックスに条件分岐で検索値を表示 takeshi 08/9/18(木) 22:33 質問
【57883】Re:テキストボックスに条件分岐で検索値を... neptune 08/9/18(木) 22:46 発言
【57884】Re:テキストボックスに条件分岐で検索値を... takeshi 08/9/18(木) 23:17 発言
【57904】Re:テキストボックスに条件分岐で検索値を... neptune 08/9/19(金) 17:23 回答
【57906】Re:テキストボックスに条件分岐で検索値を... kanabun 08/9/19(金) 19:43 発言
【57908】Re:テキストボックスに条件分岐で検索値を... neptune 08/9/19(金) 21:52 発言
【57915】Re:テキストボックスに条件分岐で検索値を... takeshi 08/9/20(土) 12:58 お礼
【57889】Re:テキストボックスに条件分岐で検索値を... kanabun 08/9/19(金) 10:18 発言
【57912】Re:テキストボックスに条件分岐で検索値を... kanabun 08/9/20(土) 0:50 発言
【57918】Re:テキストボックスに条件分岐で検索値を... takeshi 08/9/21(日) 1:34 お礼
【57923】Re:テキストボックスに条件分岐で検索値を... kanabun 08/9/21(日) 9:34 発言
【57927】Re:テキストボックスに条件分岐で検索値を... takeshi 08/9/21(日) 19:31 お礼
【57914】Re:テキストボックスに条件分岐で検索値を... takeshi 08/9/20(土) 12:49 回答

24160 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free