VarType(y)を使用しました。vbStringの結果は8です。オブジェクトの場合は9である必要があります。–ssorrrell1時間前
イミディエイトウィンドウで[印刷y]を使用して、yの内容を検索します。–ssorrrell55分前
これは私の疑いを裏付けるようです。MyOwn.Object
クラスには、文字列を返すデフォルトのプロパティまたはメソッドが必要です。
したがって、これを実行しようとするDebug.Print
と、デフォルトのプロパティ/メソッドの値が返されます。IDEで変数にカーソルを合わせると、VB6はデフォルトのプロパティ/メソッドの値を表示します。VarType
呼び出しを行うy
と、デフォルトのプロパティまたはメソッドの変数タイプが返されます。
その理由は、Variant
を格納する型の変数がObject
あり、オブジェクトのクラスがデフォルトのメソッドまたはプロパティを定義している場合、ほとんどの場合、変数はデフォルトのメソッドまたはプロパティの戻り値に評価されるためです。
クラスのオブジェクトブラウザを開き、プロパティとメソッドのリストを確認することで、MyOwn.Object
クラスにデフォルトのメンバーがあるかどうかをすばやく確認できます。隅に小さな青い円が付いたアイコンがあるメソッドまたはプロパティが表示されている場合は、そのメソッドまたはプロパティがクラスのデフォルトメンバーであることを示しています。あなたがそれを見つけたら、私はそれが文字列を返すように宣言されているに違いない。MyOwn.Object
Variant
すべてのSをObject
Sに変更した場合でも、多くの場所でこの動作が発生することに注意してください。たとえば、y
が宣言されている場合でもAs Object
、aDebug.Print y
を実行すると、デフォルトのプロパティまたはメソッドの値が出力され、aを実行するVarType(y)
と8(文字列)が返されます。
VB6がデフォルトのメンバーを使用する時期と使用しない時期を正確に知ることは、混乱を招く可能性があります。たとえば、として宣言y
した場合Object
、実行するTypeName(y)
とはが返されますMyOwn.Class
が、VarType(y)
それでも8(文字列)が返されます。y
ただし、として宣言するとVariant
、はをTypeName(y)
返しますString
。
Object
遅延バインディングを使用している場合、オブジェクト変数をまたはとしてしか宣言できないため、この副作用を回避することは困難ですVariant
。