2016-02-11 6 views
2

Доброе утро,VBA Определить имена переменных из членов массива

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

Фон: Начальный массив, создаваемый при чтении XML-файла, который принимает информацию во всех дочерних нотах в качестве значения каждого члена массива. Так, например. Если я имел некоторые XML, такие как:

<dimensions> 
    <dimension> 
     dim1 
    </dimension> 
    <dimension> 
     dim2 
    </dimension> 
    <dimension> 
     dim3 
    </dimension> 
</dimensions> 

Мой код до сих пор создает и массив, позволяет называть его my_array() с 3-мя членами:

my_array(0)=dim1 
my_array(1)=dim2 
my_array(2)=dim3 

Мой Выпуск: Что я бы тогда, как в быть в состоянии сделать, это перебрать все члены my_array() и создать новые переменные, названные после каждого члена. Таким образом, в результате этого простого случая заканчиваются 3 новые переменные, определенные dim1, dim2, dim3.

Моя попытка до сих пор:

dim i as integer 
for i=0 to Ubound(my_array) 
    dim my_array(i) as string 
next i 

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

Является ли это возможным, я думаю об этом правильно?

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

Большое спасибо

+0

Если бы вам удалось определить переменные таким образом, как бы вы их кодировали позже, учитывая, что вы не знаете их имена заранее? – GSerg

+0

Я буду использовать тот же анализ для каждой переменной, созданной так, чтобы я знал, что список измерений содержится в my_array(). Я могу пропустить свой список измерений, передавая каждому члену my_array() различные функции для возврата результатов. –

+0

Стандартным подходом к вещам в этих строках является создание словаря. Словарь по существу * представляет собой набор имен, которые могут быть определены и использованы в качестве переменных во время выполнения. Вы, кажется, знаете об этом, но относитесь к нему как к «обновлению на более позднюю дату». Зачем ждать? –

ответ

1

Если вы не хотите, чтобы скрипт редактор VBA (который много работы по сравнению с использованием словарей), но вы все еще хотите, чтобы автоматически генерировать много заявлений Dim для последующего использования, может написать саб, который генерирует тусклые заявления в виде строк, а затем печатает их в окне Immediate:

Sub test() 
    Dim i As Long 
    Dim my_array As Variant 
    Dim dims As String 

    my_array = Array("dim1", "dim2", "dim3") 

    For i = 0 To UBound(my_array) 
     dims = dims & "Dim " & my_array(i) & " As String" & vbCrLf 
    Next i 
    Debug.Print dims 
End Sub 

Выход выглядит следующим образом:

enter image description here

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

+0

Спасибо, Джон, это удобный маленький трюк. Похоже, мне придется придумать другое решение для хранения всей информации. –

Смежные вопросы