[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/01/19(Fri) 12:54
投稿者名:Do_Shirouto
Eメール:
URL :
タイトル:
配列要素についてお願いします
Combo1(20) List2(9)までツールボックスより貼り付けて
作ってあります。
下記のコードを実行すると
エラー「配列要素がありません」で
Combo1(ST + 2).Text = DS$ で止まってしまいます。
調べてみると
Combo1(ST + 1).Text = OP$ ここの ST=19 が帰ってきました
(+1してない状態)
ST=18をST=17に変えると
エラー「ファイル名 または 番号が不正です」
Do Until EOF(1)ここで止まってしまいます。
他にはOpenしていません
どこが悪いのでしょうか ご教授のほど
宜しくお願い申し上げます。
Combo1(20) List2(9) ともにIndexは確認して有ります。
’----------------------------
Private Sub List2_Click(Index As Integer)
ST = 18
Combo1(ST).Text = List2(Index).List(List2(Index).ListIndex)
List2(Index).Visible = False
Open App.Path & "\DATA.txt" For Input As #1
Do Until EOF(1)

Input #1, DAT, OP$, DS$
If DAT = Combo1(ST).Text Then
Combo1(ST + 1).Text = OP$
Combo1(ST + 2).Text = DS$
End If
Loop
Close #1

End Sub
まことに申し訳ございません。宜しくお願いいたします。

投稿時間:2007/01/19(Fri) 14:05
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 配列要素についてお願いします
下記のようなコードを起動直後に実行したらどうなりますか?
Private Sub Command1_Click()
   Debug.Print Combo1(20).Text
End Sub

>Combo1(20) List2(9)までツールボックスより貼り付けて
プログラム記入している画面の右側のプロパティのところに下記のように
表示したものがありますか?
Combo1(20) ComboBox

投稿時間:2007/01/19(Fri) 18:28
投稿者名:Do_Shirouto
Eメール:
URL :
タイトル:
Re^2: 配列要素についてお願いします
> 下記のようなコードを起動直後に実行したらどうなりますか?
> Private Sub Command1_Click()
>    Debug.Print Combo1(20).Text
> End Sub
>
> >Combo1(20) List2(9)までツールボックスより貼り付けて
> プログラム記入している画面の右側のプロパティのところに下記のように
> 表示したものがありますか?
> Combo1(20) ComboBox
ご回答有り難うございました
Combo1(20) ComboBoxは表示されています。
変数を変えてみた所エラーは出ませんが、
'---------------------------------
Private Sub List2_Click(Index As Integer)
ST=18 
Combo1(ST).Text = List2(Index).List(List2(Index).ListIndex)
List2(Index).Visible = False

Open App.Path & "\DATA.txt" For Input As #1
Do Until EOF(1)
Input #1, KIGOU$(0)
Input #1, OP$
Input #1, DAT
If Combo1(ST).Text = KIGOU$(0) Then
Combo1(ST + 1).Text = OP$ '--ここではST=18
Combo1(ST + 2).Text = DAT '--ここはなぜかST=19
Exit Do
End If
Loop
Close
End Sub
'----------------------------------------

Combo1(ST + 2).Text = DATの所で
Combo1(ST + 3)と同じ働きになってしまいます
ST=は いじっていないのになぜか19に成っています。
Combo1(ST + 1).Text = OP$でCombo(19)の所へ表示され(正解)
Combo1(ST + 1).Text = DATとするとCombo(20)の所へ表示され
なぜか希望する働きになります。
また List2(INDEX).Visible = False で
List2(INDEX)が消えなくなってしまいました
どこが問題でしょうか
宜しくお願い申し上げます。

投稿時間:2007/01/19(Fri) 19:06
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: 配列要素についてお願いします
> Combo1(ST + 1).Text = OP$ '--ここではST=18
> Combo1(ST + 2).Text = DAT '--ここはなぜかST=19
あり得ないですよね。

> また List2(INDEX).Visible = False で
> List2(INDEX)が消えなくなってしまいました

これだけが問題ですか? ST の方はいいのですね。

List2(Index).Visible = False
DoEvents  'ここへ DoEvents を書いて見て下さい。
Open App.Path & "\DATA.txt" For Input As #1

投稿時間:2007/01/19(Fri) 22:18
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3: 配列要素についてお願いします
> Combo1(ST + 1).Text = OP$ '--ここではST=18
> Combo1(ST + 2).Text = DAT '--ここはなぜかST=19
変数STの宣言文がないですがどこで宣言しているのでしょうか?
モジュールレベルで行っていたりしたら、他のイベントが発生して
それで、変数の値が変わってしまったということが考えられます。
Combo1_Changeなどにコードを書いてるということはないでしょうか。

投稿時間:2007/01/20(Sat) 08:13
投稿者名:Do_Shirouto
Eメール:
URL :
タイトル:
Re^4: 配列要素についてお願いします
> > Combo1(ST + 1).Text = OP$ '--ここではST=18
> > Combo1(ST + 2).Text = DAT '--ここはなぜかST=19
> 変数STの宣言文がないですがどこで宣言しているのでしょうか?
> モジュールレベルで行っていたりしたら、他のイベントが発生して
> それで、変数の値が変わってしまったということが考えられます。
> Combo1_Changeなどにコードを書いてるということはないでしょうか。
皆さんご回答有り難うございます。
Combo1_Changeは下記のコード記述があります。
'==============================================
Private Sub Combo1_Change(Index As Integer)
ST = Index
List2(ST \ 3).Visible = True
List2(ST \ 3).Clear
Open App.Path & "\DATA.txt" For Input As #1
Do Until EOF(1)
Input #1, DAT, OP$, DS$
If Left$(DAT, Len(Combo1(ST).Text)) = Left$(Combo1(ST).Text, Len(Combo1(ST).Text)) Then
List2(ST \ 3).AddItem DAT

End If
Loop
Close #1

End Sub
'---------------------------------------------------

STは標準モジュールでPublic ST と宣言しています。
一度 すべての変数を変えて書直してて見ます。
有り難うございました

投稿時間:2007/01/20(Sat) 09:13
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: 配列要素についてお願いします
> Private Sub Combo1_Change(Index As Integer)
> ST = Index

この ST が悪さしているようですね。
Combo1(ST + 1).Text = OP$ '--ここではST=18
ここで書き込んだ時に ST = Index で ST=19 になっている
ブレークポイントを設定して確認して見て下さい

下記のように変更して見て下さい
If Left$(DAT, Len(Combo1(Index).Text)) = Left$(Combo1(Index).Text, Len(Combo1(Index).Text)) Then
List2(Index \ 3).AddItem DAT

投稿時間:2007/01/20(Sat) 13:18
投稿者名:Do_Shirouto
Eメール:
URL :
タイトル:
Re^6: 配列要素についてお願いします
> > Private Sub Combo1_Change(Index As Integer)
> > ST = Index
>
> この ST が悪さしているようですね。
> Combo1(ST + 1).Text = OP$ '--ここではST=18
> ここで書き込んだ時に ST = Index で ST=19 になっている
> ブレークポイントを設定して確認して見て下さい
>
> 下記のように変更して見て下さい
> If Left$(DAT, Len(Combo1(Index).Text)) = Left$(Combo1(Index).Text, Len(Combo1(Index)
.Text)) Then
> List2(Index \ 3).AddItem DAT

皆さんご親切に
色々とご回答有り難うございました。
特に花ちゃん さん、LESIAさん有り難うございました
下記のように書き換えて無事解決いたしました・
'-------------------------
Private Sub List2_Click(Index As Integer)
Combo1(Index * 3).Text = List2(Index).List(List2(Index).ListIndex)

Open App.Path & "\DATA.txt" For Input As #1
Do Until EOF(1)
Input #1, Daa
Input #1, Dbb
Input #1, Dcc
If Combo1(Index * 3).Text = Daa Then
Combo1(Index * 3 + 1).Text = Dbb
Combo1(Index * 3 + 2).Text = Dcc
Exit Do
End If
Loop
Close #1
List2(Index).Visible = False
DoEvents

End Sub
'--------------------------------
お手数輪おかけして、誠に申し訳ございませんでした。
有難う御座いました。