| 
    
     |  | ▼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
 
 
 |  |