Я хочу создать функцию 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
и они работают, но внутри функции Безразлично» т.
Может ли кто-нибудь помочь?
Проблема не функция, а промежуточная переменная. Следующее приводит к той же ошибке: 'Dim tmp'' tmp = Array («Robert», Now) '' Вызов sbText.AppendFormat_5 (Nothing, sText, tmp) ' –