Познавательное

Динамические массивы 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   |   Просмотров: 1397   |   Комментарии (0)

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

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