Создание переменных внутри цикла

Я работаю в VBA и хотел узнать, можно ли создавать и называть переменные в цикле while. Моя цель — просмотреть определенный столбец на листе и создать переменные, значениями которых является текст в ячейках этого столбца.

В идеале имена переменных и их значения должны быть примерно такими:

party1 = "Owner" 
party2 = "Contractor" 
party3 = "Subcontractor"

И так далее в зависимости от количества партий.

Пока у меня есть:

Dim i As Integer, j As Integer
i = 2
j = 1
Do While Cells(i, 7).Value <> ""
    Dim partyName As String
    ' Pulls the text from the worksheet cell
    partyName = Cells(i, 7).Text
    Dim curNum As String
    curNum = CStr(j)
    Dim tempParty As String
    tempParty = "party" & curNum
    i = i + 1
    j = j + 1
Loop

Я думаю, что это сводится к вопросу: как мне сделать так, чтобы partyX было именем переменной, а значение переменной было строкой, хранящейся в partyName?

Это похоже на то, что я ищу, но это не совсем ответ на мой вопрос. Кроме того, я понимаю, что могут быть проблемы с областью действия этих переменных, но я не могу придумать другого способа сделать это.


person arlederman    schedule 05.01.2015    source источник
comment
Какие значения хранятся на partyName?   -  person Chrismas007    schedule 05.01.2015
comment
Array — это то, что вам нужно, они позволяют party(i) = "..", где i — число, см. patorjk.com/programming/tutorials/vbarrays.htm   -  person Alex K.    schedule 05.01.2015
comment
Вы не можете создавать переменные и называть их во время выполнения. Вы можете назначить вариантный массив, коллекцию или объект словаря. Словарь технически позволит вам создавать имена, но, вероятно, это не обязательно, вместо этого вы можете легко использовать массив.   -  person David Zemens    schedule 05.01.2015
comment
Я думаю, было бы проще, если бы он просто использовал «Выбрать случай», когда у него было значение партии из того, что я предполагаю, «partyName».   -  person Chrismas007    schedule 05.01.2015
comment
@Chrismas007 partyName хранит строку (например, «Владелец», «Подрядчик» и т. д.). Я думаю, что массив будет работать. Я также выясню, что такое «Выбрать дело». Спасибо вам всем!   -  person arlederman    schedule 05.01.2015


Ответы (1)


ЕСЛИ вам нужно превратить ИМЯ в ЧИСЛО, используя Select Case:

Dim CurRow As Long, LastRow As Long
LastRow = Cells(Rows.Count, 7).End(xlUp).Row

For CurRow = 1 to LastRow
    partyName = Cells(i, 7).Value
    Select Case partyName
        Case "Owner"
            partyNum = 1
        Case "Contractor"
            partyNum = 2
        Case "Subcontractor"
            partyNum = 3
        Case Else
    End Select
    'Do something with partyNum here
Next CurRow

Если вам нужно превратить ЧИСЛО в ИМЯ, используя Select Case:

Dim CurRow As Long, LastRow As Long
LastRow = Cells(Rows.Count, 7).End(xlUp).Row

For CurRow = 1 to LastRow
    partyNum = Cells(i, 7).Value
    Select Case partyNum
        Case 1
            partyName = "Owner"
        Case 2
            partyName = "Contractor"
        Case 3
            partyName = "Subcontractor"
        Case Else
    End Select
    'Do something with partyName here
Next CurRow
person Chrismas007    schedule 05.01.2015
comment
Это полезно, спасибо! Это похоже на то, что делаю я, и позже я смогу использовать первый случай в сценарии. - person arlederman; 05.01.2015