2004/11/19〜で同じ内容の質問をし、回答を頂いて解決したのですが、そのときは.NETにおける場合で、全く同じ事をVB6でどうやって解決したらよいか悩んでいます。
標準モジュールで構造対を宣言し
Module Module1
Public Structure Kozotai
*******************
End Structure
End Module
クラスで、上に定義した構造体を引数にメソドを記述します
Public Class Class1
Public Sub Enzan(ByVal KK As Kozotai)
*******************
End Sub
End Class
フォームのボタンをクリックして、クラスのメソドを使うべく
Private Sub Button1_Click()
Dim k As Kozotai
Dim cls As New Class1
cls.Enzan(k)
End Sub
としてプログラムを走らせるとエラーになります。
この解決方法として Module Module1 を Public Module Module1 と変更することを教えて頂きましたが、全く同じことをVB6でやろうとすると、そもそも標準モジュールを開いた時に
Module Module1
End Module
なる記述が現れないので直しようがないのです。仕方なく標準モジュールに
Public Type Kozotai
*******************
End Type
と書いてはみたもののうまくいきません。
具体的解決方法を教えて頂きたく宜しくお願いします。
VB.NETとVB6では文法が違いますから…両方の仕様をよく把握しておかないと、
そのままダウングレードはできません。
事前知識が不足しすぎているような感をうけますので、構造体の引数うんぬんの前に、
まずは、ヘルプのチュートリアル等をもう少し読み直しておかれる事をお勧めします。
> Module Module1
> End Module
> なる記述が現れないので
VB.NETでは、Module〜End Moduleや、Class〜End Classといったブロックにて、
一つの*.vbファイル内に、複数のクラスやモジュールを定義できますよね。
しかしVB6では、これらはファイル単位で定義されます。
一つのクラスモジュール(*.clsファイル)には一つのクラスしか定義できませんし、
標準モジュール(*.basファイル)も同様です。ブロックでの定義はできません。
いずれかのファイルに、Moduleステートメントを使わずに記載してください。
なお、質問中に、構造対と構造体という言葉で出てきていますが、正しくは
「構造体(Structure)」です。VB.NETでは Structure ステートメントで定義します。
VB6では、ユーザー定義型(User Defined Type)がそれに近いものにあたり、こちらは
「Typeステートメント」で定義する事になります。
> と書いてはみたもののうまくいきません。
VB6では、標準モジュールにて宣言したユーザー定義型を、
Public なプロシージャの引数にする事はできません。
この場合は、
・プロシージャのスコープを、Private または Public に下げる。
・ユーザー定義型を、Publicなクラスにて宣言する。
・ユーザー定義型を使うのを諦め、クラスで代用する。
のいずれかの対処が必要となります。
ツイート | ![]() |