2015-06-29 5 views
0

Вопрос в том, должен ли я определять размеры массива или изменять размер массива динамически?Доступ к VBA: определение массивов

У меня есть форма с подформой с полями «да/нет». У меня есть объект набора записей, который подмножает данные формы только в тех строках, где выбраны поля Да.

Я прокручиваю набор записей и добавляю значение к строке.

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

Я пытался делать такие вещи, как

dim myArray(0 to variableEqualToLengthOfRecordset) as variant 

Но это говорит мне, что нужно постоянное значение в операторе.

Кто-нибудь знает, есть ли способ установить длину массива динамически?

Если я просто определить его как

dim myArray() as variant 

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

+0

Если вы * «добавить значение в строку» * с последовательным разделителем между значениями в этой строке --- как * значению1 ; value2; value3 * --- вы можете затем «Разделить()» строку в массив, и этот массив будет автоматически иметь размер: varArray = Split (YourStringVariable, ";") 'Если вам действительно необходимо измерить массив явно, вы можете сначала 'Dim' до произвольного размера, а затем' ReDim' по мере необходимости. См. Разделы справки Access. – HansUp

+0

Это пришло мне в голову. Как объявить varArray в вашем примере. Dim varArray() как вариант? – Carl

+1

С помощью только 'Dim varArray As Variant' он примет массив, возвращенный из' Split() ' – HansUp

ответ

0

Theres несколько способов сделать это, но короче говоря, да, вы можете определить массив так же как переопределить его динамически. Чтобы переопределить использование Redim varArray или просто перезаписать переменную. Heres немного пример того, что я использую, когда я не знаю, длина струн

Dim varArray as String 

varArray = Split(String, " ") ' Or whatever type it is and its delimiter. 

'Then just cycle through the array with a for loop 

for Counter = LBount(varArray) to UBound(array) 
    string = string + varArray(counter) 

next counter 
0

Да, вы можете переопределить массив с помощью ReDim Preserve intArray(), но это очень дорого и замедлит вашу программу. Я бы порекомендовал просто сделать массив максимальным размером и поставить пробелы, когда они не проверяют поле или ничего, а затем просто поместите массив If (I) = "", затем ничего не делайте или что-то в этом роде. Если вы не получите массив размером более 1 000 000, я сомневаюсь, что у вас возникнут проблемы.