VBScript为WScript.Echo创建函数别名

时间:2014-09-25 13:36:57

标签: vba excel-vba vbscript cmd excel

我知道这没有任何意义。 但不过。

我想创建WScript.Echo的完整副本

我的方法是用另一个短名称创建函数。

Sub print(arguments)
    WScript.Echo arguments
End Sub

在WScript.Echo中,参数是字符串数组WScript.Echo Arg1, Arg2, Arg3... Optional string values to be displayed.(可能不是数组,但它看起来像字符串列表)

我的问题是如何将相同的参数传递给我的函数?或者可能是一般情况下不可能。

2 个答案:

答案 0 :(得分:1)

WScript.Echo是一个variadic Sub(采用任意数量的参数)。你不能在VBScript中编写这样的函数/子/方法。在VBA中,您可以使用Parameter ArrayOptional关键字。

对于VBScript:您可以编写一个Sub,它将数组a作为唯一参数并WScript.Echo Join(a),但我怀疑

print Array(...)

值得(1 **字母来打字)努力。

更新:**显然我无法计算。

答案 1 :(得分:1)

下面是VBS代码,它提供与VBA中ParamArray修饰符相同的功能:它允许传递任意数量的参数,并且被调用的函数接收传递的参数作为数组。它使用ScriptControl JScript arguments属性来准备参数数组。

Dim oSC, Echo

Set oSC = CreateObject("MSScriptControl.ScriptControl")
oSC.Language = "JavaScript"
oSC.AddCode "echo = function () {var dict = new ActiveXObject('Scripting.Dictionary'); for(var i=0; i<arguments.length; i++) {dict.add(i, arguments[i]);} echoArr(dict.Items());}"
oSC.AddObject "echoArr", GetRef("EchoArr"), True
Set Echo = oSC.Eval("echo")

Echo "one", "two", "three"
Echo "True variadic sub"

Function EchoArr(arr)
    WScript.Echo Join(arr)
End Function

要以可变方式方式调用WScript.Echo,您可以使用Execute,并使用以下代码替换上面代码中的EchoArr函数(但我不确定它是否具有实用价值):< / p>

Function EchoArr(arr)
    Dim s, i
    s = "WScript.Echo "
    i = 0
    For i = 0 to UBound(arr)
        s = s & "arr(" & i & ")"
        If i < UBound(arr) Then s = s & ", "
    Next
    Execute s
End Function