Создать строку оценки в VBA - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть список строк, определенных как

Dim replyFormat(0 To 999) As String

, и список ответов как

Dim answers(0 to 999) As String

, и во всем коде некоторые строки добавляются в replyFormat, которые выглядят примерно так::

Name: {1} {3}

Когда все будет сделано, я определяю строку с именем sendBack и начинаю цикл по каждой строке в replyFormat.Я хочу установить sendBack равным самому себе и тому, что представляет собой replyFormat, оценивая ответы для чисел в фигурных скобках и, наконец, добавляя vbCrLf в конец.Например, если ответы содержат {Да, Джон, Х, Доу}, а атрибут replyFormat имеет значение «Имя: {1} {3}», то будет выдано «Имя: Джон Доу»

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Звучит так, как будто вы имеете в виду отражение , которое не поддерживается в VBA.Однако вы можете достичь желаемого результата, используя регулярные выражения (RegEx):

Function FormattedString(stringToFormat As String, replacements() As String) As String

    Dim placeholder As Variant
    Dim index As Long

    With CreateObject("VBScript.RegExp")
        .Pattern = "\{([\d]{1,3})\}"
        .Global = True
        .MultiLine = False
        .IgnoreCase = True

        If .Test(stringToFormat) Then
            For Each placeholder In .Execute(stringToFormat)
                index = CLng(placeholder.SubMatches(0))
                stringToFormat = Replace$(stringToFormat, placeholder, replacements(index))
            Next
        End If
    End With

    FormattedString = stringToFormat

End Function

Пример использования:

Sub FooBar()

    Dim answers(0 To 3) As String
    Const testString = "Name: {1} {3}"

    answers(0) = "Test"
    answers(1) = "John"
    answers(2) = "Testing"
    answers(3) = "Doe"

    Debug.Print FormattedString(testString, answers) '// "Name: John Doe"

End Sub
0 голосов
/ 22 ноября 2018

Если это ваш объект:

Ob = { Yes, John, H, Doe},

Вы можете выбрать объект объекта следующим образом:

Ob(1), Ob(3)

Для получения дополнительной информации, пожалуйста, перейдите по этой ссылке:

Получить индекс объекта, хранящегося в коллекции, используя его ключ (VBA)

...