VBAでマクロを開発しています。関数を呼び出すときに何らかの理由で変数に括弧を追加する必要があります。 MacでVBAを使用してコードをクロスプラットフォームにし、C++ライブラリとのデータ交換を行うには、これを行います。必要な変数はカッコでこの式に代入することはできません
エラーを再現するコードサンプルがあります。あなたが見ることができるように
Private Type S0
x As Double
End Type
Private Type S1
s_0 As S0
End Type
Private Type S2
s_1() As S1
End Type
Private Sub RunMe()
Dim l As S2
ReDim l.s_1(1 To 2)
'no error
Call Display(l.s_1(1).s_0)
'compilation error : variable required can't assign to this expression
Call Display((l.s_1(1).s_0))
End Sub
Private Sub Display(d As S0)
MsgBox d.x
End Sub
は、それがadditionalsの括弧で私の機能表示を呼び出すことは論理的ではないのですが、それは基本的な例については、このような作業は、理由は、私は知りません。
基本タイプのみを使用すると機能します。私はそれがユーザー定義型に関連していると思います。
だから、私は2つの質問があります:私は私の例のように括弧を追加するとき
- をVBAの振舞には何ですか?
- コンパイルエラーを回避して同じコンパイルを維持するにはどうすればよいですか?
私を読んで助けてくれてありがとう!
あなたの最初の質問に:私の答えを見てください。あなたの2番目の質問に:単にかっこをつけないでください。なぜあなたはそれらが必要だと思いますか? –
Macでは、Display Callの後にライブラリからC++関数を呼び出すと、配列s_1を取得できません。私は、データメモリアドレス(SAFEARRAY *タイプとpvData)へのヌルポインタしか持っていません。 VBA配列がSAFEARRAYであり、ネイティブ(Windowsフレームワーク)でC++で使いやすいため、PC上でうまく動作します。 しかし、Macでは、この構造体をC++で再定義する必要があり、配列のサブパートをC++関数の前の関数に渡す場合を除いてうまくいきます。 – TuDa