Видеоуроки бесплатно!

динамические массивы vba

Сказки на ночь

Динамические массивы VBA

  

Очень часто размер массива заранее неизвестен. Теоретически можно создать массив очень большого размера "на все случаи жизни", однако это решение приведет к напрасной трате ресурсов и не гарантирует 100%-го результата. Выходом из подобной ситуации является использование динамического массива. Объявление динамического массива аналогично объявлению обычного массива без указания размера последнего:

Dim myArray()

Когда размер динамического массива станет известен, инициализируйте его с помощью выражения ReDim:
Sub MySheets()
Dim myArray() As String
Dim myCount As Integer, NumShts As Integer
NumShts = ActiveWorkbook.Worksheets.Count
'  Инициализация динамического массива.
ReDim myArray(1 To NumShts)
For myCount = 1 To NumShts
myArray(myCount)  = ActiveWorkbook.Sheets(myCount).Name
Next myCount
Worksheets("Через один").Range("J33").Resize(, _
NumShts).Value = myArray
End Sub

Повторная инициализация массива с помощью выражения ReDim приводит к полному уничтожению его предыдущего содержимого. Чтобы предотвратить потерю текущих значений элементов массива, воспользуйтесь ключевым словом Preserve. Следующий макрос создает массив, состоящий из имен файлов рабочих книг Excel, находящихся в заданной папке.
Sub XLFilesO
Dim FName As String
Dim arNames() As String
Dim myCount As Integer
FName = Dir(ThisWorkbook.Path & "*.xlsn)
Do Until FName = ""
myCount = myCount + 1
ReDim Preserve arNames(1 To myCount)
arNames(myCount)  = FName
FName = Dir
Loop
On Error Resume Next
Worksheets("Через один").Range("J38").Resize(, _
myCount).Value = arNames
End Sub

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

Передача массива в качестве параметра
Массив можно передавать в качестве параметра, подобно обычной переменной. Это повышает эффективность и читабельность кода. Следующий макрос передает массив myArray в качестве параметра функции Region- Sales, которая подсчитывает сумму элементов массива и возвращает полученный результат.
Sub PassAnArray()
Dim myArray() As Variant
Dim myRegion As String
myArray = Range("mySalesData")
myRegion =  InputBox("Введите регион  - Запад,  Центр или Восток")
MsgBox "Продажи в регионе  " & myRegion & " составили  " &
Format(RegionSales(myArray, _
myRegion),   "$#,#00.00 ")
End Sub
Function RegionSales(ByRef BigArray As Variant, _
sRegion As String)  As Long
Dim myCount As Integer
RegionSales = 0
For myCount = LBound(BigArray)  To UBound(BigArray)
If BigArray(myCount,  1)  = sRegion Then
RegionSales = BigArray(myCount, _
4)   * BigArray(myCount,  3)  + RegionSales
End If
Next myCount
End Function

Результат выполнения макроса PassAnArray показан на рис. 17.7.
Динамические массивы VBA

Рис. 17.7. Массив можно передавать в качестве параметра функции или процедуре

Массив — это переменная специального типа, которая может хранить несколько элементов данных. Основное предназначение массива заключается в
упрощении обработки данных и повышении скорости выполнения программного кода. Следующая глава посвящена работе с текстовыми файлами.
Экспортирование данных в текстовый файл может понадобиться для передачи информации в другую систему или создания HTML-файла.
 
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.


Дата: 18 марта 2014   |   Опубликовал: Admin   |   Просмотров: 1115   |   Комментарии (0)

Уважаемый , статьи ниже возможно будут интересны вам:

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.