Объединение строки и переменной для ссылки на другую переменную - PullRequest
1 голос
/ 23 февраля 2020

Можно ли объединить строку и переменную, чтобы создать имя другой переменной и сослаться на нее в том же go? Например:

Sub Test()
    Dim colorName As String
    Dim columnYellow As Long

    colorName = "Yellow"
    columnYellow = 3

    Debug.Print columnYellow '-> prints "3"
    Debug.Print "column" & colorName '-> prints "columnYellow" (I would like it to return 3)

End Sub

Я бы хотел, чтобы Debug.Print "column" & colorName вернул "3" вместо "columnYellow". Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 23 февраля 2020

Может ли этот код помочь? Введите действительный номер индекса или слово для перечисленного цвета.

Function ColIndex(ByVal Arg As Variant) As Variant
    ' return 0 if not found

    ' first colour listed has the index #1
    Const Cols As String = "Red,Green,Yellow"
    Dim Col() As String
    Dim i As Integer

    Select Case VarType(Arg)
        Case vbString
            Col = Split(Cols, ",")
            For i = UBound(Col) To 0 Step -1
                ' use VbBinaryCompare for case sensitive comparison
                If StrComp(Col(i), Arg, vbTextCompare) = 0 Then Exit For
            Next i
            If i >= 0 Then ColIndex = i + 1
        Case vbInteger, vbLong
            On Error Resume Next
            ColIndex = Split(Cols, ",")(Arg - 1)
    End Select
End Function
1 голос
/ 23 февраля 2020

Можем ли мы использовать массив?

Sub Test()
    Dim colors(0 To 1, 0 To 1) as Variant

    colors(0, 1) = "Yellow"
    colors(1, 0) = 3

    Debug.Print "Column " & colors(1, 0) 'prints column number
    Debug.Print "Color " & colors(0, 1) 'prints color name
End Sub
1 голос
/ 23 февраля 2020

Идентификаторы переменных не могут быть объединены, кроме как с CallByName , что ограничено объектами (вы не можете вызвать метод из стандартного модуля).

В качестве альтернативы используйте массив или коллекция. Вы должны использовать коллекцию, где у вас может быть строка в качестве ключа к значению, а строки могут быть объединены.

Sub Test()
    Dim ColorNameNr As Collection
    Dim colorName As String
    Set ColorNameNr = New Collection
    ColorNameNr.Add 3, "columnYellow"
    colorName = "Yellow"

    Debug.Print ColorNameNr.Item("columnYellow") '-> prints "3"
    Debug.Print ColorNameNr.Item("column" & colorName) '-> prints "3")
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...