VBA でモジュール クラスから新しいオブジェクトを作成しようとしていますが、少し問題があります。2 行の割り当てコードは同じように見えますが、結果は異なります。

エラーメッセージが表示されました:

その後、(2) の代わりに (1) を使用するように切り替え、エラーは修正されました。

しかし、わかりません。なぜこのような違いがあるのでしょうか?
VBA でモジュール クラスから新しいオブジェクトを作成しようとしていますが、少し問題があります。2 行の割り当てコードは同じように見えますが、結果は異なります。

エラーメッセージが表示されました:

その後、(2) の代わりに (1) を使用するように切り替え、エラーは修正されました。

しかし、わかりません。なぜこのような違いがあるのでしょうか?
Dim変数を宣言し、Setインスタンス化します。
そのため、常にDimbeforeを使用することをお勧めしSetます。
を使用して変数の特定の型を宣言しない場合Dimは、後で変数を別の型に変更できます。
set aosh = new AOSHRatioQuery
変数を文字列に変更できます。
aosh = "A pint of milk"
メソッドは 2 番目の引数としてsendAsyncRequesta を想定しAOSHRatioQuery、VBA コンパイラは、aosh変数が実際にその型のインスタンスを含むことを保証できないことを認識しているため、型の安全性に違反し、解釈できないガベージを受信しないように型の不一致エラーが発生します。sendAsyncRequest
with を明示的に入力するDim aosh as new AOSHRatioQueryと、常にインスタンスまたは(別の型に代入しようとするとエラーが発生します) であることaoshが保証されているため、安全に渡すことができます。AOSHRatioQueryNothing
VBA では、Dim キーワードを使用して変数を宣言し、As キーワードでデータ型を定義する必要があります。それがその構文の仕組みです。一般的な形式として:
Dim <variableName> As <dataType>