2013-02-14 2 views
3

Я хочу создать функцию FormatString для VBScript, которая работает так же, как String.Format в .Net.Почему этот семантически эквивалентный (насколько я вижу) код vbscript сбой

Я нашел я могу использовать объект System.Text.StringBuilder в VBScript и протестировали следующий код, который работает

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 ».

Так что я не понимаю, почему вне функции я могу пройти следующие типы в порядке:

Ничего
Строка
Arrary

и они работают, но внутри функции Безразлично» т.

Может ли кто-нибудь помочь?

+2

Проблема не функция, а промежуточная переменная. Следующее приводит к той же ошибке: 'Dim tmp'' tmp = Array («Robert», Now) '' Вызов sbText.AppendFormat_5 (Nothing, sText, tmp) ' –

ответ

2

Вам необходимо передать параметр массива по значению:

Call sbText.AppendFormat_5(Nothing, sText, Arguments) 
==> 
Call sbText.AppendFormat_5(Nothing, sText, (Arguments)) 
Смежные вопросы