将变量从控制台传递到vbs到Excel宏

时间:2013-01-27 21:36:11

标签: c# vba vbscript

我正在尝试将变量传递给以下几组代码:

来自用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文件中的变量VBScript是问题所在,因为如果我将其替换为诸如“hello”之类的文字,那么该变量将移动到excel VBA中。

如何修复vbs文件以便变量传递到行?

1 个答案:

答案 0 :(得分:4)

VBScript中的所有变量都是Variant s。您不能通过引用将Variant传递给需要引用字符串的方法。然而,您可以按值传递它,因为然后解释器将为您进行转换。

将您的Sub xxx修改为Sub xxx(ByVal x As String)