はじめまして。だるまと申します。
本を読んでもどうしても分からないので教えていただきたいのですが、
配列を他のプロシージャで利用するにはどうすればいいか?です。
環境は、VB6.0です。
現在、MDI(Multi Document Interface)を利用してプログラムを作っているところなのですが、form1で利用した配列の変数をform2で利用したい場合、publicでform1の先頭に
Public main(0 To 60) As String
のように宣言をすると、
コンパイルエラー:
「定数、固定長文字列、配列、ユーザー定義型およびDeclareステートメントは、オブジェクトモジュールのパブリックメンバとしては使用できません。」
と表示されます。
どうやったら解決できるか教えてください!よろしくお願いします。
配列をパブリックで定義する場合、配列の数をあらかじめ指定しておくことはできません。
動的配列だけ定義しておいて、プログラム実行時に配列を確保します。
配列の数が60と固定であれば
Public main() As String
Public Const mainNum as Integer = 60
と定義しておき、
たとえば、Form1_Load()の中とかで
Redim main(mainNum)
と、配列をメモリに確保します。
minamiさん。とても早くご返事くれてありがとうございます。
minaimiさんのアドバイスに基づいて動的配列について自分でやってみたのですが、まだ、よく分からないところがあります。
1.
Public main() As String をform1の先頭に書き、
Loadのところで
ReDim main(60) As String
とした所、先ほどのエラーと同じエラーが出てしまいました。
2.
Public main As String をform1の先頭に書き、
Loadのところで
ReDim main(60) As String
とした所、
「配列がありません。」というエラーが出てしまいました。
3.
Dim main() As String をform1の先頭に書き、
form1のLoadのところに
ReDim main(60) As String
とした所、form1ではエラーは出ませんでしたが、Publicで宣言していない為、form2のところで
「SubまたはFunctionが定義されていない。」とエラーが出てしまいました。
1,2,3をやってみてminamiさんの文に近い3番(Dimですが)が正しいと思うのですができなかったので、もう少しアドバイスいただきたいです。よろしくお願いします。
minamiさん:
> 配列をパブリックで定義する場合、配列の数をあらかじめ指定しておくことはできません。
いえ、そんな事は無いですよ。(^^;
標準モジュール等では、問題なく定義できますし。
だるまさん:
> 1.
フォームモジュール等では、『Publicな配列』は宣言できません。
> 2.
その場合、mainは配列として宣言されていないため、ReDimはできません。
> 3.
その場合の Dim は、Privateとして宣言した事になるためです。
Privateな配列にして、それをPublic Propertyとして公開させる事で
代用してみて下さい。例えば、こんな感じです。
Private Data_(0 To 60) As String
Public Property Get Data(ByVal Index As Integer) As String
Data = Data_(Index)
End Property
Public Property Let Data(ByVal Index As Integer, ByVal Value As String)
Data_(Index) = Value
End Property
こうしておけば、Form2からでも
Form1.Data(0) = "代入"
MsgBox Form1.Data(0)
のようにして利用できます。
すいません、間違ってましたね^^;(思いっきり勘違いしてましたゴメンナサイ)
配列をパブリックで定義する場合、標準モジュール内でないと駄目でした。
で、標準モジュール内であれば
Public main(0 To 60) As String
とやっても大丈夫だと思います。
minamiさん。こんなに遅い時間までありがとうございました。
標準モジュールを使って無事解決しました!
ありがとうございました!!!
ツイート | ![]() |