1

vbs ファイルをブリッジとして使用して、Java から Excel ファイル内の vba マクロにアクセスしたいと考えています。さらに、いくつかの変数パラメーターを送信する必要があります。

Java では、次のように vbs ファイルを開くように呼び出します (正常に動作します)。

         String strFileName = "mappe2.xlsm"; //located in the same directory
         String strMacroName = "showname";
         String strParameter = "Myname";

         String[] command = {"wscript.exe", f.getAbsolutePath(), strFileName, strMacroName, strParameter};
         Process p = Runtime.getRuntime().exec(command);

Excelでは、この単純なサブを呼び出そうとしています:

Sub showname(strName As String)
     MsgBox ("The name is: " & strName) 
End Sub

そして、私の(短縮された)vbsファイルは次のようになります。

Dim args, ExcelFileName, ExcelMacroName
Dim opt
Dim Command2
Set args = WScript.Arguments
ExcelFileName = args(0)
ExcelMacroName = args(1)
opt = Cstr(args(2))
Set objWbk = GetObject("E:\Mappe2.xlsm")

Command2 = ExcelFileName & "!" & "showname"

'objWbk.Application.Run Command2, "opt" 'This way it works!
objWbk.Application.Run Command2, opt 'Error: "Type conflict" occurs!

WScript.Quit

ここでは、静的な「opt」を使用したマクロの呼び出しが正常に機能することがわかります。しかし、変数に変更したため、型の競合のエラーが発生し、理由がわかりません。可変にする必要があります。

手伝って頂けますか?

4

3 に答える 3

1

これは、引数として文字列sub showname(strName As String)が必要なためです。変数に文字列が含まれていても 、変数を渡すには、 opt を string として明示的に変換します。optVariableobjWbk.Application.Run Command2, Cstr(opt)

于 2013-07-09T05:55:07.970 に答える
0

自分の質問に答える前に、新しいユーザーとして待つ必要がありました。読みやすくなったので、今すぐやりたいと思います。

まあ、少なくとも私は回避策を見つけました。変数で機能しない理由を説明することはできませんが、私のソリューションがどのように機能するかを示します。誰かが理由を説明できる場合は、私と他の人に知らせてください.

それでは、ステップバイステップでやってみましょう:

ここで、opt は args(2) の値を取得します。

opt = args(2)

次に、両方とも同じ値を表示します (どちらも Java メソッドで宣言されているように「Myname」を表示します)。

wscript.echo "opt : " & opt 
wscript.echo "args(2) : " & args(2)

マクロを実行する変数として opt を使用できません。

objWbk.Application.Run Command2, opt  'Error: Type conflict!

しかし、arguments-collection を直接使用すると機能します。

objWbk.Application.Run Command2, args(2)

現在、受信したパラメーターを変更する必要がないため、私にとっては問題ありません。それらをマクロに転送するだけです。しかし、変数を使用して異なる値を送信する必要がある場合、この方法ではできないのではないかと思います。誰かが解決策を知っているなら、私に知らせてください!

ご協力ありがとうございました!

于 2013-07-08T21:06:27.487 に答える