planetz Ответов: 3

Как воссоздать имя переменной в excel VBA


Привет,

Я пишу макрос excel. Здесь я пытаюсь воссоздать имена переменных внутри цикла, чтобы избежать нескольких строк почти одинаковых кодов. Но моя проблема заключается в том, что воссозданная переменная превращается в строку, и я не могу получить значение, присвоенное этой переменной. Пожалуйста, помогите!!

Что я уже пробовал:

Dim days, percent As Variant
    days = Array("015", "1530", "3160", "6190", "g90")
    percent = Array("7080", "8090", "g90")

    For i = 0 To 4
        For j = 0 To 2
            v = cnt7080_015
            valu = "cnt" & percent(j) & "_" & days(i)
            
            Cells(rowc, k).Value = "cnt" & percent(j) & "_" & days(i)
            rowc = rowc + 1
        Next
        k = k + 1
        rowc = 7
    Next

Richard MacCutchan

Ваш код делает именно то, что вы ему говорите. Он устанавливает значение ячейки в строку.

planetz

Но как преобразовать его в имя переменной?

ZurdoDev

Почти уверен, что вы используете Eval(). Функция eval("УНТ" &амп; процентов(J), в &ампер; "_" &амп; дней(я))

Patrice T

Откуда берутся эти переменные?

planetz

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

3 Ответов

Рейтинг:
1

CHill60

Eval работает в Access, но не существует в Excel VBA.

На этом посту есть несколько обходных путей Использование строки для ссылки на переменную (Excel Office 2003) | Windows Secrets Lounge[^]. Моим личным предпочтением всегда было использовать рабочий лист и шагать по строкам по мере необходимости (хотя, честно говоря, мое личное предпочтение не имеет ничего общего с Excel VBA - но это только я)


Рейтинг:
1

Patrice T

Ваша проблема выглядит как плохое решение неправильного дизайна.
Насколько я понимаю,вы пытаетесь получить доступ к переменным VBA, составляя их имена.

Почему вы используете 15 переменных, а не 2D-массив ?
[Обновление]

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

Программирование Excel VBA - многомерные массивы[^]


planetz

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

Рейтинг:
0

Maciej Los

Взгляните на код после небольших изменений:

Dim days As Variant, percent As Variant, sTmp As String
Dim wsh As Worksheet 'declare variable which refers to Sheet1 

'initiate variable of type Worksheet
'change it to your needs
Set wsh = ThisWokbook.Worksheets("Sheet1")

    days = Array("015", "1530", "3160", "6190", "g90")
    percent = Array("7080", "8090", "g90")
 
    For i = LBound(days) To UBound(days)
        For j = LBound(percent) To UBound(percent)
            'v = cnt7080_015
            sTmp = "cnt" & percent(j) & "_" & days(i)
            wsh.Cells(rowc, k).Value = sTmp
            rowc = rowc + 1
        Next
        k = k + 1
        rowc = 7
    Next

'clean up!
Set wsh = Nothing


Я бы настоятельно рекомендовал прочитать это: Методы кодирования и методы программирования[^]


planetz

Я изменил свой код в соответствии с вашим кодом. И все же он генерирует одно и то же значение!

Richard MacCutchan

Конечно, так оно и есть, именно так работает VBA, как я уже говорил вам в своем первом комментарии.