如何为函数编写代码,该函数将返回2个值并在调用时写入excel?

时间:2018-02-07 02:19:27

标签: vbscript

我的问题是如何从函数中返回2个值( myApp.fields.map(field => field.obj.label = field.label.default); myApp.fields.map(field => field.label.textContent = field.obj.label); & Sales_Tax_Amount)。

到目前为止,这是我的代码:

Total_Price

2 个答案:

答案 0 :(得分:0)

函数不能有两个返回,但它可以返回一个可以容纳多个值的变量类型,如Array。它还可以将变量传递给它byref,更改变量值,然后最初调用的子例程可以使用这些更改的值:

返回包含两个值的数组:

Sub test()
    myArray = myFunction
    Debug.Print myArray(0), myArray(1)
End Sub
Function myFunction() As Variant
    Dim returnVals(0 To 1) As Double

    returnVals(0) = 1.36
    returnVals(1) = 2.5

    myFunction = returnVals
End Function

运行子程序" test()"将以下值打印到即时窗格

 1.36          2.5 

或者,您可以传入两个变量byref。该函数将更改其值,并且在函数运行后,传递变量的子例程将能够使用更改的值。

Sub test()
    Dim var1 As Double
    Dim var2 As Double

    Call mySub(var1, var2)

    Debug.Print var1, var2
End Sub

Function mySub(ByRef variable1 As Double, ByRef variable2 As Double)
    variable1 = 1.36
    variable2 = 2.5
End Function

这会将函数中设置的值打印到即时窗口。

您还可以将函数中确定的值存储到工作表中,然后在子例程中将其拾取,或将值存储在全局变量中。除非你要反复使用这些值并且需要它们在vba运行之间持久化,否则应该避免这两种情况。

答案 1 :(得分:0)

如果您将数组分配给函数名称,那么您的函数fnTax_Calculator()将“正常”:

Dim a : a = fnTax_Calculator()
WScript.Echo Join(a)

Function fnTax_Calculator()
    Dim Arry(1)
    'Function should return Sales_Tax_Amount when it is called in the form of %x.xx
    'Sales_Tax_Amount = Sale_Amount * Sales_Tax_Rate
    'Function should return Total_Price when it is called in the form of $xxxx.xx
    'Total_Price = Sale_Amount + Sales_Tax_Amount

    Arry(0) = 47 ' Sales_Tax_Amount
    Arry(1) = 11 ' Total_Price
    ' to specify the return value, assign it to the function's name
    fnTax_Calculator = Arry
End Function

输出:

cscript 48654959.vbs
47 11