Excel 用の VBA マクロを作成しているときに、構文オプションに問題があります。VBA では、次の 2 つの方法でオブジェクトのメソッドを呼び出すことができます。
foo.bar(arg1, arg2)
また
foo.bar arg1, arg2
私は 2 番目の種類の構文を絶対に嫌います。なぜなら、それには何らかの明確さが欠けているからです。そのため、通常は最初のオプションに従います。ただし、最初のオプションを使用するとエラーが発生し、2 番目のオプションは正常に実行されるという状況に遭遇しました。(これはおそらく、私のコードの他の問題を示している可能性があります。) 犯人のコードは次のとおりです。
Function GetFundList() As Collection
Dim newFund As FundValues
Range("A5").Select
Set GetFundList = New Collection
While Len(Selection.Value)
Set newFund = New FundValues
' I set the fields of newFund and move Selection
問題は次の行にあります。
GetFundList.Add newFund
Wend
End Function
FundValues は私が作成したクラスで、本質的に単なる構造体です。ループ中に設定される 3 つのプロパティがあります。
基本的に、私が呼び出すGetFundList.Add(newFund)
と、次のエラーが発生します。
実行時エラー '438': オブジェクトはこのプロパティまたはメソッドをサポートしていません
しかし、通話GetFundList.Add newFund
はまったく問題ありません。
なぜこれが起こっているのかを説明するのに十分なVBAの複雑さを理解している人はいますか?
編集:説明をありがとう!