Как получить доступ к значению строки при определении внутри цикла - PullRequest
0 голосов
/ 27 июня 2019

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

Я пробовал val (), создавая функцию. Упрощенная версия моей проблемы может быть найдена в коде ниже.


Function StudentValue(x As String) As String
   StudentValue = x
End Function


Public Sub TEST()

    Dim i As Integer
    Dim strName As String
    Dim n As Integer

    n = 20

    For i = 1 To n
        strName = "Variable" & CStr(i)

        'The problem occurs with the next two lines,
        'once active they create a string with the name 'strName' and not the
        'value of the string eg 'Variable1', 'Variable2', ect

        'Attempt1
        'Dim strName As String
        'Attempt2
        'Dim NameFunction(strName) As String
    Next i

End Sub

Ошибки следующие:

Dim strName As String results in "compile error: Duplicate declaration in current scope"

Dim NameFunction(strName) As String results in "compile error: Constant expression required"

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

Заранее спасибо!

1 Ответ

3 голосов
/ 27 июня 2019

Вы получаете ошибку «Duplicate декларация», потому что вы пытаетесь объявить переменную с тем же именем.
Вы получаете ошибку «Требуется постоянное выражение» Ошибка, потому что Dim XYZ () в качестве строки является синтаксисом для объявлениямассив.И значение в скобках указывает размер массива и должно быть постоянным.

Вот ссылка на то, как использовать массивы.

Use Option Explicit, этопоможет решить проблемы до того, как они возникнут.

Вот ваш код с использованием массивов.

    Option Explicit

    Function StudentValue(x As String) As String
       StudentValue = CStr(x)
    End Function


    Public Sub TEST()
        Const MaxNumNames As Integer = 20

        Dim i As Integer
        Dim strNames(1 To MaxNumNames) As String

        For i = 1 To MaxNumNames
            'This will populate the array of names
            strNames(i) = "Variable" & CStr(i)

            'To use the name in the loop
            Debug.Print "In Loop:" & strNames(i)
        Next i

        'To use the name outside the loop (Show 5th name)
        Debug.Print "Outside Loop: " & strNames(5)
        ' To use the name in your function outside the loop (Using 2nd Name)
        Debug.Print "Using Function: " & StudentValue(strNames(2))
    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...