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