2

次のコードセットに変数を渡そうとしています:

で書かれたコンソール アプリケーションからC#:

static void Main(string[] args) {

    string myPath = @"R:\xxx\xxx\xxx\test.vbs";
    Process p = new Process();
    ProcessStartInfo ps = new ProcessStartInfo(myPath,"hello");
    p.StartInfo = ps;
    p.Start();

    Console.WriteLine("press [enter] to exit");
    Console.ReadLine();

}

次のtest.vbsファイルに:

strFolder = Wscript.Arguments.Item(0)
Set XL=CreateObject("Excel.Application") 
XL.Visible=True 
XL.Workbooks.Open "\\xxx\xxx\xxx\PassInVariable.xlsm",,True
XL.Run "'PassInVariable.xlsm'!xxx", strFolder   '<<<<<<<<<<<<<<PROBLEM SEEMS TO BE HERE
XL.Workbooks("PassInVariable.xlsm").close false
XL.quit
Set XL=nothing

次に、PassInVariable.xlsmファイルには次のものがあります。

Option Explicit
Sub xxx(x As String)

MsgBox x

End Sub

strFolderこれを「hello」などのリテラルに置き換えると、変数がExcel VBAに移動するため、VBScriptファイル 内の変数に問題があるようです。

変数が行に渡されるように vbs ファイルを修正するにはどうすればよいですか?

4

1 に答える 1

4

VBScript のすべての変数はVariants です。Variant参照渡しの文字列を期待するメソッドに参照渡しを渡すことはできません。ただし、インタープリターが変換を行うため、値で渡すことができます。

Sub xxxになるように修正してくださいSub xxx(ByVal x As String)

于 2013-01-27T21:51:02.947 に答える