モジュール変数としての二次元配列の宣言の仕方が分かりません。
宣言したいテーブルは以下です。
Dim table(1) As Variant
table(0) = Array("0","1","2")
table(1) = Array("3","4","5")
ローカル変数として宣言すれば通るのですが、モジュールにしたとたんに通らなくなってしまいます。
なぜなのでしょうか?
環境はVB6.0です。
> モジュール変数としての二次元配列の宣言の仕方が分かりません。
「Private table(1, 2) As Variant」とか…。
> 宣言したいテーブルは以下です。
> Dim table(1) As Variant
> table(0) = Array("0","1","2")
> table(1) = Array("3","4","5")
これは二次元配列ではなく、一次元のジャグ配列ですね。
配列を初期化する位置が悪いのでは?
勘違いであったらごめんなさい。
Dim table(1) As Variant
'配列の初期化をここで行っているのでは?
Private Sub Form1_Load()
'配列の初期化をここで行うと問題ありません。
table(0) = Array("0", "1", "2")
table(1) = Array("3", "4", "5")
End Sub
Private Sub Command1_Click()
MsgBox table(1)(2)
End Sub
しゅうさんのやり方でできました。
しかし配列の数が386*8のサイズなので、
Private Sub Form1_Load()
:
End Sub
の間で初期化しようとするとプロシージャが大きすぎますというエラーがでてしまいます。
配列の初期化を
syokika1
syokika2
という二つのサブルーチンプロシージャに分ければコンパイルはできましたが、
なんとか一つで済ませる方法はありませんでしょうか?
データをバイナリファイルとして外部に持っておき、それをGet#ステートメントで一括取得するとか。
編集 削除頂いたアドバイスを参考にして
Dim Table(1 To 3) As Variant
Dim IndexNo As Integer
Private Sub Form_Load()
Func
End Sub
Private Sub ComboBox_Click(Index As Integer)
IndexNo = ComboBox(Index).Index
Label1.Caption = Table(IndexNo)(0)
Label2.Caption = Table(IndexNo)(1)
Label3.Caption = Table(IndexNo)(2)
End Sub
Sub Func()
Table(1) = Array(40, 45, 35)
Table(2) = Array(50, 65, 45)
Table(3) = Array(70, 85, 65)
End Sub
というものを作ったんですが、型が一致しませんというエラーがでて、解消せきません。
ComboBoxはコントロール配列で、SSTabのそれぞれのページ毎に設置してあります。
> IndexNo = ComboBox(Index).Index
これって、無意味では?
IndexNo = Combo1(Index).Text
の間違いかなにかで、
ComboBoxには数値にキャスト不能な文字列が入っているとか・・・
> IndexNo = ComboBox(Index).Index
> これって、無意味では?
ComboBoxはコントロール配列で3個設置してあり、Indexに0〜2の値が入っています。
その値をIndexNoに取得する為なのですが、これではダメなのでしょうか?
その値をClickイベントプロシージャ外で使ってないなら
Indexをそのまま使えばいいし、
外部で使うためにモジュールレベル変数を使っているのなら
IndexNo = Index
でいいのでは?
ただ、記述のコードを見る限り、ComboBoxを使う意味がないように思えます。
押したコントロールのIndex値を使うだけなら
Commandボタンで十分ですから・・・。
それとも選択されたComboBoxの値は
どこか他のところで利用しているのでしょうか?
>それとも選択されたComboBoxの値は
>どこか他のところで利用しているのでしょうか?
はい、利用してるんです。
それより、
Label1.Caption = Table(IndexNo)(0)
の部分の型が一致しませんというエラーが解消できないんです。
やはりTableの宣言の位置が悪いのでしょうか?
>Label1.Caption = Table(IndexNo)(0)
>の部分の型が一致しませんというエラーが解消できないんです。
「インデックスが有効範囲にありません」じゃなくって?
イミディエイトウィンドウで
エラー停止時のIndexNoの値を調べ、
異常がなければ
Table(IndexNo)(0)の値を調べてみてください。
Form_Load()のところが
Form1_Load()になっているって事はないですよねー。