我正在尝试将变量传递给以下几组代码:
来自用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文件以便变量传递到行?
答案 0 :(得分:4)
VBScript中的所有变量都是Variant
s。您不能通过引用将Variant
传递给需要引用字符串的方法。然而,您可以按值传递它,因为然后解释器将为您进行转换。
将您的Sub xxx
修改为Sub xxx(ByVal x As String)
。