используя одну переменную для вызова второй - PullRequest
1 голос
/ 21 декабря 2011

У меня есть несколько массивов:

mIOSconfig = Array("  ! *** SRMS ***  ", "int *** PORT ***")
mCATOSconfig = Array("  ! *** SRMS ***  ", "set port name *** DESC *** *** PORT ***   ")

и я хочу вызвать их, используя внешний пользовательский ввод.

Итак, предполагая, что пользователь вводит «IOS», я хочу использовать mIOSconfig в будущем коде.

Итак, давайте предположим, что ввод пользователя хранится в переменной x.

 x="IOS"
    usedarray = "m" + x + "config"

somevarible = somefunction(usedarray)

msgbox (somevarible)

Но это не работает, поскольку переменная usedarray является строкой и передается функции, а не массиву. Как я могу использовать созданную переменную usedarray для передачи созданного в начале массива функции?

Приветствия

Aaron

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

В качестве обходного пути вы можете использовать коллекцию, чтобы делать то, что вы хотите. Создайте объект Collection и .Add массивы для коллекции, используя «IOS», «CATOS» и т. Д. В качестве ключей к коллекции.

Как отметил @Justin в своем комментарии, то, что вы конкретно пытаетесь сделать, не поддерживается VBA.

1 голос
/ 22 декабря 2011
Sub GetOptionsByName()

    Dim opts As Object, strOpt As String
    Set opts = CreateObject("scripting.dictionary")

    'load the various alternatives
    opts.Add "IOS", Array("  ! *** SRMS ***  ", "int *** PORT ***")
    opts.Add "CATOS", Array("  ! *** SRMS ***  ", _
                            "set port name *** DESC *** *** PORT ***   ")

    strOpt = "IOS"

    Debug.Print Join(opts(strOpt), "::")


End Sub
0 голосов
/ 21 декабря 2011

Почему бы просто не иметь один массив, который вы заполняете на основе входных данных, из базы данных или файла конфигурации?

Тогда использовать одно и то же имя массива в коде?

Ниже я обнаружил VB.Net, но не вижу, почему нет VBA. Почему вы позволяете пользователям вводить свободный текст? Почему не comboBox / список доступных конфигов?

Dim myStrings As New List(Of String)
Private Enum ArrayType
    IOS = 1
    CATOS = 2
End Enum
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim strInput As String
    Dim theInputtedType As ArrayType

    strInput = InputBox("Enter Value", "Enter the value")

    Select Case strInput
        Case Is = "IOS"
            theInputtedType = ArrayType.IOS
        Case Is = "CATOS"
            theInputtedType = ArrayType.CATOS
        Case Else
            MessageBox.Show("Value not recognised")
            Exit Sub
    End Select

    PopulateMyList(theInputtedType)

    For Each s As String In myStrings
        MessageBox.Show(s)
    Next
End Sub

Private Sub PopulateMyList(ByVal InputtedType As ArrayType)
    Select Case InputtedType
        Case ArrayType.IOS
            'This would be a config read or DB read!!!!
            myStrings.Add("  ! *** SRMS ***  ")
            myStrings.Add("int *** PORT ***")
        Case ArrayType.CATOS
    End Select
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...