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

本文关键字:vbs 再到 Excel 变量 控制台 | 更新日期: 2023-09-27 17:56:19

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

从用 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

似乎VBScript文件中的变量strFolder是问题所在,因为如果我将其替换为诸如"hello"之类的文字,则该变量将移动到 excel VBA 中。

如何修复 vbs 文件以便变量向下传递?

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

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

将您的Sub xxx固定为Sub xxx(ByVal x As String)