Replace (strFormat, "{0}", value1)
На основании фрагмента кода, я предполагаю, что вы верите, что Replace mutates strFormat
напрямую. Так не работает; Вы назначаете результат исходной переменной следующим образом:
strFormat = Replace (strFormat, "{0}", value1)
Вы также можете назначить другую переменную для хранения измененных результатов, например:
strFormat2 = Replace (strFormat, "{0}", value1)
Почему нет? Этот код работает здесь:
value1 = "1"
value2 = "2"
strFormat = "Value1 is {0} and Value2 is {1}."
strFormat = Replace (strFormat, "{0}", value1)
strFormat = Replace (strFormat, "{1}", value2)
MsgBox strFormat
Обратите внимание, что я обновляю свое значение strFormat
для каждой замены.
Если вам нужна более гибкая реализация, вы можете использовать регулярное выражение, но сейчас это не требуется .
Вот небольшая симпатичная функция, которая работает наподобие функции .NET string.Format. Я сделал это быстро, поэтому добавление обработки ошибок зависит от вас. Я сделал это в VB6 и добавил ссылку на Microsoft VBScript Regular Expressions 5.5
Public Function StringFormat(ByVal SourceString As String, ParamArray Arguments() As Variant) As String
Dim objRegEx As RegExp ' regular expression object
Dim objMatch As Match ' regular expression match object
Dim strReturn As String ' the string that will be returned
Set objRegEx = New RegExp
objRegEx.Global = True
objRegEx.Pattern = "(\{)(\d)(\})"
strReturn = SourceString
For Each objMatch In objRegEx.Execute(SourceString)
strReturn = Replace(strReturn, objMatch.Value, Arguments(CInt(objMatch.SubMatches(1))))
Next objMatch
StringFormat = strReturn
End Function
Пример:
StringFormat ("Здравствуйте, {0}. Я хочу, чтобы вы познакомились с {1}. Они оба работают для { 2}. {0} проработал на {2} 15 лет. "," Брюс "," Крис "," Кайл ")
Возвращает:
Привет, Брюс. Я хочу, чтобы вы познакомились с Крисом. Они оба работают на Кайла. Брюс проработал на Кайла 15 лет.