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

#arrays #vba #loops #variables

#массивы #vba #циклы #переменные

Вопрос:

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

Рассматриваемая переменная — EngineeringEndDate . Через цикл я могу получить имя этой переменной, загруженное в ActivityNameEndDate. Есть ли способ получить значение EngineeringEndDate в моем цикле?

Вот сценарий:

 EngineeringEndDate = 01-01-2020
PurchaseEndDate = 01-02-2020
<Etc.>

For S = 115 To 128

    RoutingID = Settings.Range("A" amp; S).Value
    ActivityNameEndDate = Settings.Range("B" amp; S).Value amp; "EndDate"

    ActivityEndDate = DateValue(Format(<<EngineeringEndDate>>, "dd-mm-yyyy"))

Next S
 

gfdg

Комментарии:

1. ActivityEndDate = DateValue(Format(EngineeringEndDate, "dd-mm-yyyy")) << который будет использовать значение, поскольку имя — это просто метка, связанная со значением.

2. Так выглядит мой скрипт в настоящее время. Но я хотел бы, чтобы этот цикл выполнял insert EngineeringEndDate, а затем PurchaseEndDate и т. Д. Всего существует 49 действий, которые должны пройти через цикл. В настоящее время у меня один и тот же сценарий 49 раз

3. вставьте куда, пожалуйста? Что не работает с написанным кодом?

4. Вставка значения различных действий в цикле по одному. Например, S = 115 приводит к ActivityNameEndDate = «EngineeringEndDate». Но S = 116 приводит к ActivityNameEndDate = «PurchaseEndDate». Я хотел бы получить соответствующую дату в цикле.

5. Если вы спрашиваете о том, о чем я думаю, вы спрашиваете, вы не можете этого сделать. Вы не можете использовать содержимое ячейки для определения строки, представляющей переменную. Используйте массив,

Ответ №1:

Вы можете использовать массив — и сократить свой код:

 Dim EngineeringEndDate As Date
Dim PurchaseEndDate As Date
' ...
Dim InvoiceDate As Date

Dim Dates(115 To 128) As Date

EngineeringEndDate = #01/01/2020#
PurchaseEndDate = #02/01/2020#
' ...
InvoiceDate = #02/15/2020#

Dates(115) = EngineeringEndDate
Dates(116) = PurchaseEndDate
' ...
Dates(128) = InvoiceDate


For S = LBound(Dates) To UBound(Dates)

    RoutingID = Settings.Range("A" amp; S).Value
    ActivityNameEndDate = Settings.Range("B" amp; S).Value amp; "EndDate"
    ActivityEndDate = Dates(S)

Next S