3

我想为 VBScript 创建一个与 .Net 中的 String.Format 相同的 FormatString 函数。

我发现我可以在 VBScript 中使用 System.Text.StringBuilder 对象并测试了以下有效的代码

Option Explicit

Dim sbText 'As System.Text.StringBuilder
Set sbText = CreateObject("System.Text.StringBuilder")

Call sbText.AppendFormat_5( _
                Nothing, _
                "My name is {0} and the current date time is '{1:dd MMMM yyyy HH:mm:ss}'", _
                Array("Robert", Now))


Call MsgBox(sbText.ToString())

然后我把它放在一个函数中,它失败了,见下文

Option Explicit

Function FormatString(ByVal sText, ByVal Arguments) 'As String

    Dim sbText 'As System.Text.StringBuilder

    'Test the input variables
    If Not TypeName(sText) = "String" Then _
        Err.Raise 5 'vbErrInvalidProcCallOrArg

    If Not IsArray(Arguments) Then _
        Err.Raise 5 'vbErrInvalidProcCallOrArg

    Set sbText = CreateObject("System.Text.StringBuilder")
    Call sbText.AppendFormat_5(Nothing, sText, Arguments)

    FormatString = sbText.ToString()

End Function

Call MsgBox(FormatString( _
            "My name is {0} and the current date time is '{1:dd MMMM yyyy HH:mm:ss}'", _
            Array("Robert", Now)))

它失败Call sbText.AppendFormat_5(Nothing, sText, Arguments)并出现错误“无效的过程调用或参数:'sbText.AppendFormat_5'”。

所以我不明白为什么在函数之外我可以按顺序传递以下类型:

Nothing
String
Arrary

它们可以工作,但在函数内部却不行。

有人可以帮忙吗?

4

1 回答 1

2

您需要按值传递数组参数:

Call sbText.AppendFormat_5(Nothing, sText, Arguments)
==>
Call sbText.AppendFormat_5(Nothing, sText, (Arguments))
于 2013-02-14T10:26:44.310 回答