0 / 0 / 0 Регистрация: 29.10.2015 Сообщений: 26 |
|
1 |
|
Динамическое создание массива кнопок29.03.2016, 20:23. Показов 5076. Ответов 11
Объясните, пожалуйста, подробнее, как создается массив кнопок и происходит к ним обращение.
0 |
Pro_grammer Модератор 6792 / 2814 / 527 Регистрация: 24.04.2011 Сообщений: 5,308 Записей в блоге: 10 |
||||
29.03.2016, 20:35 |
2 |
|||
Вначале на форму устанавливаете первую кнопку. Потом копируете её при помощи контекстного меню, которое вызывается посредством кликания ПКМ.
1 |
Заблокирован |
|
29.03.2016, 20:43 |
3 |
Pro_grammer, для VBA это не подойдёт, как ни печально
0 |
M6fhysr 0 / 0 / 0 Регистрация: 29.10.2015 Сообщений: 26 |
||||
29.03.2016, 20:50 [ТС] |
4 |
|||
А почему не подойдет?
Но не понимаю, что такое Command1. Это как раз тот самый массив?
0 |
Заблокирован |
|
29.03.2016, 21:10 |
5 |
Нашел отрывок кода: Это как раз из VB, но не VBA. Добавлено через 16 минут
вот пример из Уокенбаха
1 |
Модератор 6792 / 2814 / 527 Регистрация: 24.04.2011 Сообщений: 5,308 Записей в блоге: 10 |
|
29.03.2016, 21:22 |
6 |
для VBA это не подойдёт Тормознул, думал я в разделе VB6, что то там модерировал, ну и замодерировался
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
29.03.2016, 21:24 |
7 |
|||
M6fhysr, создайте пустую форму, добавьте этот код и запустите.
1 |
Pro_grammer Модератор 6792 / 2814 / 527 Регистрация: 24.04.2011 Сообщений: 5,308 Записей в блоге: 10 |
||||
29.03.2016, 21:27 |
8 |
|||
Решение А вообще VBA не поддерживает массивы элементов управления. Если только самому какой нибудь костыль придумать.
2 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
29.03.2016, 23:03 |
9 |
и происходит к ним обращение Только обращение?
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
30.03.2016, 00:08 |
10 |
Посмотрел и оценил работу
multiple buttons.xls (38.0 Кб, 115 просмотров А вот мой пример* (без объявления массива), так, для опытов, понажимайте кто смелый: https://www.cyberforum.ru/atta… 1450314657 ________________
0 |
5561 / 1367 / 150 Регистрация: 08.02.2009 Сообщений: 4,107 Записей в блоге: 30 |
|
30.03.2016, 00:14 |
11 |
(Исправьте кто может!)
0 |
0 / 0 / 0 Регистрация: 29.10.2015 Сообщений: 26 |
|
01.04.2016, 18:20 [ТС] |
12 |
Спасибо, очень помогли
0 |
это решается с помощью модуля класса и withevents..
вот пример:
в модуле класса:
Public WithEvents CommandBarEvents As CommandBarButton
Private Sub CommandBarEvents_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
On Error Resume Next
If Ctrl.Tag = 256 Then
Application.Run Ctrl.OnAction
CancelDefault = True
Call Application.OnTime(Now + TimeValue(«0:00:01»), «Auto_open», Now + TimeValue(«0:00:05»))
End If
End Sub
в стандартном модуле:
Global cm As C_event
Sub Auto_open()
Call Register_Event_Handler
end sub
Sub Register_Event_Handler()
Set cm = New C_event
set cm.CommandBarEvents=comandbars(..).control
End Sub
правда, когда мне надо было разместить 500 кнопок, я почему то предпочел написать 500 обработчиков.. не вручную, конечно..
от недостатка опыта
forum.sources.ru
Создание массива контролов в VBA -> Форум на Исходниках.Ру
Большая часть VB-примеров актуальна и для VBA-раздела
Создание массива контролов в VBA, Управление массивом контролов по событию
Управление массивом контролов на примере текстбоксов
Создаем класс clsCtrlArr
В модуле класса пишем:
Public WithEvents ctl As MSForms.TextBox
Private Sub ctl_Change()
Cancel = True
MsgBox ctl.Name
End Sub
Ваяем форму с тремя ТехтБоксами
В модуле формы пишем:
Private Massiv() As New clsCtrlArr
Private Sub UserForm_Initialize()
Dim Contr As MSForms.Control, i As Long
For Each Contr In Me.Controls
If Left(Contr.Name, 7) = «TextBox» Then
ReDim Preserve Massiv(0 To i)
Set Massiv(i).ctl = Contr
i = i + 1
End If
Next
End Sub
Сайт автора: www.dimit.pochta.ru
Junior |
В продолжение темы: Ваять контролы можно и не вручную, а с помощью кода. Пример с четырьмя ComboBox: В Class1: Public WithEvents comb As MSForms.ComboBox Private MyIndex As Integer Private Sub comb_Change() MsgBox «Вы изменили ComboBox» & MyIndex End Sub Public Property Let Item(NewCtrl As MSForms.ComboBox) Set comb = NewCtrl End Property Public Property Let Index(NewIndex As Integer) MyIndex = NewIndex End Property Public Property Get Item() As MSForms.ComboBox Set Item = comb End Property Public Property Get Index() As Integer Index = MyIndex End Property В Module1: В UserForm1: Private Sub UserForm_Initialize() Dim cm As ComboBox, i As Long For i = 0 To 3 Set cm = UserForm1.Controls.Add(«Forms.ComboBox.1») With cm .AddItem «123» .Top = i * 30 End With ReDim Preserve Massiv(i) With Massiv(i) .Item = cm .Index = i End With Next End Sub Событие comb_Change, конечно, можно изменить на другое. И реакция на него должна быть требуемая Вам. Сообщения были разделены в тему «программное создание контролов» |
Открываем, например, Аксесс. Создаём форму. На неё кидаем 5 лабелов (они получают имена «Надпись0…4») и кнопку (она получает имя «Кнопка5»). Открываем модуль формы и кидаем туда следующий код: Private Sub Кнопка5_Click() Dim ArrayOfControls(0 To 4) As Control Dim i As Integer For i = 0 To 4 Set ArrayOfControls(i) = Me.Controls(«Надпись» & CStr(i)) Next For i = 0 To 4 ArrayOfControls(i).Properties(«Caption») = CStr(Rnd) Next End Sub Полученную форму открываем на просмотр и убеждаемся, что каждое нажатие кнопки изменяет надписи. Есть желание — можно и потрассировать. Поскольку все контролы, складываемые в массив, есть надписи, можно было определить его и как ArrayOfControls(0 To 4) As Label, и не потребовалось бы дёргать коллекцию Properties — но я хотел показать универсальность метода. Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно. |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
Добрый день!
Столкнулся с такой проблемой, точнее с отличием программирования в среде VB6 и VBA.
Чтобы создать массив элементов управления в среде VB6 достаточно просто скопировать данный элемент (copy) и вставить (paste) его на ту же самую форму. В этот момент ты сразу же получаешь сообщение с предупреждением-предложением «Вы уже имеете элемент управления с таким именем. Вы хотите создать массив элементов управления?». После этого достаточно кликнуть по кнопке «ОК» и массив будет создан автоматически, причем одному из этих элементов будет автоматически назначено свойство Index, равное нулю, а другому свойство Index, равное единице.
Сейчас понадобилось сделать то же самое в Экселе, но оказалось, что после проделывания вышеописанных действий массив не создается, а просто создается новый элемент управления с уникальным именем, например Label4 (если Label1, Label2 и Label3 уже имеются на данной форме).
Теперь вопрос.
Можно ли в среде VBA Excel создавать массивы элементов управления во время «design time», или можно только во время «run time», или вообще нельзя?
How to loop through all controls in a UserForm; this allows you to do things like get values from the controls or to update them all at once.
Sections:
Code to Loop through Controls
Control Loop Examples
List of Control Names
Notes
Code to Loop through Controls
For Each FormControl In Me.Controls
'Do something with the controls here.
'FormControl is the object that will contain references to the control.
Next
This is the basic loop code that you can use in any UserForm in order to loop through all of the controls within it.
Note: this code should be placed within the form where you want to loop through the controls. If you want to loop through another form, you should replace Me.Controls with UserFormName.Controls where UserFormName is the name of the form that you want to loop through.
Control Loop Examples
Once you know how to loop through the controls, you probably want to do something with those controls.
There are two basic ways to do something with controls, using their name or the type of control. The name comes from the Name property and it is something that you can change for each control. The type of control is specific to each control type, TextBox, CommandButton, etc.
Loop through Controls Using their Name
This kind of loop isn’t the most useful unless you are trying to get a list of the control names, but it’s worth mentioning.
For Each FormControl In Me.Controls
'Do something with the controls here.
'FormControl is the object that will contain references to the control.
'Output the name of the control
MsgBox FormControl.Name
Next
When you put this into your form and run it, a message box will appear with the name of each control in the form.
Note that controls do not all have the same properties. For instance, though each control has the Name property, as used in the loop above, but each control does not have the Text property. As a result of this, you cannot do something like a blanket reset of the form using a loop without having to make exceptions for each type of control.
To reset all controls in a form, view our tutorial: Reset All Values in a UserForm
Loop through Controls Using their Type
This is more useful as it allows you to do things like go through all of the textbox controls in a UserForm and clear them or go through the optionbutton controls or checkbox controls.
For Each FormControl In Me.Controls
'Do something with the controls here.
'FormControl is the object that will contain references to the control.
'Check only OptionButtons
If TypeName(FormControl) = "OptionButton" Then
'Do something with the OptionButton Controls.
End If
Next
TypeName(FormControl) is what returns the type of control in the form.
In the next section, you will see a list of all of the control types so that you can easily reference them within the loop. For instance, OptionButton in the above loop is the control type for the option button form control.
List of Control Names
These names are found when you view the toolbox in the VBA window and hover over the controls for the form.
- Label
- TextBox
- ComboBox
- ListBox
- CheckBox
- OptionButton
- ToggleButton
- Frame
- CommandButton
- TabStrip
- MultiPage
- ScrollBar
- SpinButton
- Image
- RefEdit
Notes
Looping through the controls is the first part of the issue; next, you need to do something with the controls once you have located them. Here are some tutorials that will teach you how to access control properties and get data from as well as input data into form controls — all of this can be done within the above loops.
UserForm Control Properties Overview
Getting Data from a UserForm
Put Data into a UserForm
Make sure to download the sample file for this tutorial; all above code is contained in the form for the «Control Loop» button.
Similar Content on TeachExcel
Reset All Values in a UserForm
Tutorial: Clear or reset all values in a UserForm so that they contain only the default original val…
Quickly Reset All Form Controls in a Worksheet in Excel
Tutorial:
How to reset all Form Controls on a worksheet in Excel with the click of a button or two …
Put Data into a UserForm
Tutorial: How to take data from Excel and put it into a UserForm. This is useful when you use a form…
Multiple Selections in a ListBox
Tutorial: There are two different kinds of multiple item selections that you can have for a ListBox …
Select Ranges in the Worksheet from a UserForm
Tutorial: Select a range in Excel from a UserForm and have that range input into the form so that yo…
Getting Data from a UserForm
Tutorial: How to get data from a UserForm in Excel, including from: text inputs (TextBox), list boxe…
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Содержание
- Массивы элементов управления
- Vba excel элементы управления массивы
- VBA Excel. Элемент управления ListBox (список)
- Элемент управления ListBox
- Свойства списка
- Способы заполнения ListBox
- VBA Excel. Массивы (одномерные, многомерные, динамические)
- Одномерные массивы
- Многомерные массивы
- Динамические массивы
- Максимальный размер
- Использование массивов
- Функции Array, LBound, UBound
- Функция Array
Массивы элементов управления
Создание массива элементов управления во время разработки
Если Вам известно конкретное количество тех или иных элементов управления, то будет целесообразней создать их во время разработки. Сделать это очень просто.
Создаем на форме, к примеру, элемент управления CommandButton1, убеждаемся, что он он выделен и копируем его в буфер обмена (Ctrl+C). Далее выполняя операцию Ctrl+V, получаем на форме еще один элемент управления CommandButton1. В результате этих действий Вы создали массив элементов из двух командных кнопок! Теперь внимательно просмотрите окно ‘Properties’, там Вы увидите,
что созданные командные кнопки, которые отличаются друг от друга только своим индексом. Index — это то свойство, которое позволяет элементам управления организовываться в массивы. Открыв окно кода, Вы увидете, что несмотря на то, что на форме находятся две командные кнопки, в разделе Object присутствует только – Command1. Выбрав ее Вы попадете в процедуру обработки события
Click, обратите внимание, что в данном случае процедура содержит аргумент Index. Аргумент Index указывает на индекс того элемента управления, для которого сгенерировано событие.
Если Вы следовали описанию и создали на форме командные кнопки, то впишите следующий код в процедуру обработки Click и Вам станет ясно как это работает.
Private Sub Command1_Click (Index As Integer)
‘В заголовке формы отображаем индекс нажатой кнопки
Me.Caption = «Нажата кнопка с индексом — » & Index
End Sub
Создание массива элементов управления во время выполнения программы
Если Вам заранее не известно количество тех или иных элементов управления, которое необходимо будет создать, то не волнуйтесь, т.к. и это очень просто. Создаем на форме, к примеру, элемент управления CommandButton1, в окне ‘Properties’ для свойства Index устанавливаем значение 0 (нуль). В результате выполненых Вами действий создается массив элементов управления с одним элементом. Для создания последующих элементов управления (в данном случае командных кнопок) Вам необходимо будет ввести соответствующий код в процедуру обработки события выполнении при которой должен (или должны) возникнуть новые элементы управления. В данном случае мы вставляем код в процедуру обработки события Form_Load формы.
Private Sub Form_Load ()
‘Создаем новую командную кнопку в существующий массив
Load Command1(1)
‘Размещаем ее там, где Вам необходимо.
Command1(1).Top = Command1(0).Top + Command1(0).Height
Command1(1).Left = Command1(0).Left
‘Делаем новую кнопку видимой
Command1(1).Visible = True
End Sub
Вот и все !
Если Вы следовали описанию и создали на форме командные кнопки, то впишите следующий код в процедуру обработки Click и Вам станет ясно как это работает.
Источник
Vba excel элементы управления массивы
С оздание массива контролов в VBA -> Форум на Исходниках.Ру
Большая часть VB-примеров актуальна и для VBA-раздела
Создание массива контролов в VBA, Управление массивом контролов по событию
Управление массивом контролов на примере текстбоксов
Создаем класс clsCtrlArr
В модуле класса пишем:
Public WithEvents ctl As MSForms.TextBox
Private Sub ctl_Change()
Ваяем форму с тремя ТехтБоксами
В модуле формы пишем:
Private Massiv() As New clsCtrlArr
Private Sub UserForm_Initialize()
Dim Contr As MSForms.Control, i As Long
For Each Contr In Me.Controls
If Left(Contr.Name, 7) = «TextBox» Then
ReDim Preserve Massiv(0 To i)
Set Massiv(i).ctl = Contr
В продолжение темы: Ваять контролы можно и не вручную, а с помощью кода.
Пример с четырьмя ComboBox:
Public WithEvents comb As MSForms.ComboBox
Private MyIndex As Integer
Private Sub comb_Change()
MsgBox «Вы изменили ComboBox» & MyIndex
Public Property Let Item(NewCtrl As MSForms.ComboBox)
Set comb = NewCtrl
Public Property Let Index(NewIndex As Integer)
Public Property Get Item() As MSForms.ComboBox
Public Property Get Index() As Integer
Private Sub UserForm_Initialize()
Dim cm As ComboBox, i As Long
Set cm = UserForm1.Controls.Add(«Forms.ComboBox.1»)
ReDim Preserve Massiv(i)
Событие comb_Change, конечно, можно изменить на другое. И реакция на него должна быть требуемая Вам.
Открываем, например, Аксесс. Создаём форму. На неё кидаем 5 лабелов (они получают имена «Надпись0. 4») и кнопку (она получает имя «Кнопка5»). Открываем модуль формы и кидаем туда следующий код:
Private Sub Кнопка5_Click()
Dim ArrayOfControls(0 To 4) As Control
Dim i As Integer
Set ArrayOfControls(i) = Me.Controls(«Надпись» & CStr(i))
Полученную форму открываем на просмотр и убеждаемся, что каждое нажатие кнопки изменяет надписи. Есть желание — можно и потрассировать. Поскольку все контролы, складываемые в массив, есть надписи, можно было определить его и как ArrayOfControls(0 To 4) As Label, и не потребовалось бы дёргать коллекцию Properties — но я хотел показать универсальность метода.
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
Источник
VBA Excel. Элемент управления ListBox (список)
Элемент управления пользовательской формы ListBox для выбора и ввода информации в VBA Excel. Свойства списка, его заполнение, извлечение данных, примеры кода.
Элемент управления ListBox
Список используется в тех случаях, когда необходимо добавить в форму информацию, которая заранее известна, а ее отдельные позиции можно сгруппировать в список. Элемент управления ListBox оправдывает себя при небольших списках, так как большой список будет занимать много места на форме.
Использование полос прокрутки уменьшает преимущество ListBox перед элементом управления ComboBox, которое заключается в том, что при открытии формы все позиции для выбора на виду без дополнительных действий со стороны пользователя. При выборе информации из большого списка удобнее использовать ComboBox.
Элемент управления ListBox позволяет выбрать несколько позиций из списка, но эта возможность не имеет практического смысла. Ввести информацию в ListBox с помощью клавиатуры или вставить из буфера обмена невозможно.
Свойства списка
Свойство | Описание |
---|---|
ColumnCount | Указывает количество столбцов в списке. Значение по умолчанию = 1. |
ColumnHeads | Добавляет строку заголовков в ListBox. True – заголовки столбцов включены, False – заголовки столбцов выключены. Значение по умолчанию = False. |
ColumnWidths | Ширина столбцов. Значения для нескольких столбцов указываются в одну строку через точку с запятой (;). |
ControlSource | Ссылка на ячейку для ее привязки к элементу управления ListBox. |
ControlTipText | Текст всплывающей подсказки при наведении курсора на ListBox. |
Enabled | Возможность выбора элементов списка. True – выбор включен, False – выключен*. Значение по умолчанию = True. |
Font | Шрифт, начертание и размер текста в списке. |
Height | Высота элемента управления ListBox. |
Left | Расстояние от левого края внутренней границы пользовательской формы до левого края элемента управления ListBox. |
List | Позволяет заполнить список данными из одномерного или двухмерного массива, а также обращаться к отдельным элементам списка по индексам для записи и чтения. |
ListIndex | Номер выбранной пользователем строки. Нумерация начинается с нуля. Если ничего не выбрано, ListIndex = -1. |
Locked | Запрет возможности выбора элементов списка. True – выбор запрещен**, False – выбор разрешен. Значение по умолчанию = False. |
MultiSelect*** | Определяет возможность однострочного или многострочного выбора. 0 (fmMultiSelectSingle) – однострочный выбор, 1 (fmMultiSelectMulti) и 2 (fmMultiSelectExtended) – многострочный выбор. |
RowSource | Источник строк для элемента управления ListBox (адрес диапазона на рабочем листе Excel). |
TabIndex | Целое число, определяющее позицию элемента управления в очереди на получение фокуса при табуляции. Отсчет начинается с 0. |
Text | Текстовое содержимое выбранной строки списка (из первого столбца при ColumnCount > 1). Тип данных String, значение по умолчанию = пустая строка. |
TextAlign | Выравнивание текста: 1 (fmTextAlignLeft) – по левому краю, 2 (fmTextAlignCenter) – по центру, 3 (fmTextAlignRight) – по правому краю. |
Top | Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края элемента управления ListBox. |
Value | Значение выбранной строки списка (из первого столбца при ColumnCount > 1). Value – свойство списка по умолчанию. Тип данных Variant, значение по умолчанию = Null. |
Visible | Видимость списка. True – ListBox отображается на пользовательской форме, False – ListBox скрыт. |
Width | Ширина элемента управления. |
* При Enabled в значении False возможен только вывод информации в список для просмотра.
** Для элемента управления ListBox действие свойства Locked в значении True аналогично действию свойства Enabled в значении False.
*** Если включен многострочный выбор, свойства Text и Value всегда возвращают значения по умолчанию (пустая строка и Null).
В таблице перечислены только основные, часто используемые свойства списка. Еще больше доступных свойств отображено в окне Properties элемента управления ListBox, а все методы, события и свойства – в окне Object Browser.
Вызывается Object Browser нажатием клавиши «F2». Слева выберите объект ListBox, а справа смотрите его методы, события и свойства.
Свойства BackColor, BorderColor, BorderStyle отвечают за внешнее оформление списка и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления ListBox на проекте пользовательской формы.
Способы заполнения ListBox
Используйте метод AddItem для загрузки элементов в список по одному:
Источник
VBA Excel. Массивы (одномерные, многомерные, динамические)
Массивы в VBA Excel: одномерные, многомерные и динамические. Объявление и использование массивов. Операторы Public, Dim и ReDim. Функции Array, LBound, UBound.
Одномерные массивы
Объявление одномерных (линейных) статических массивов в VBA Excel:
В первом случае публичный массив содержит 10 элементов от 0 до 9 (нижний индекс по умолчанию — 0, верхний индекс — 9), а во втором случае локальный массив содержит 9 элементов от 1 до 9.
По умолчанию VBA Excel считает в массивах нижним индексом нуль, но, при желании, можно сделать нижним индексом по умолчанию единицу, добавив в самом начале модуля объявление «Option Base 1». Вместо верхнего индекса можно использовать переменную.
Многомерные массивы
Объявление многомерных статических массивов в VBA Excel аналогично объявлению одномерных массивов, но с добавлением размерностей дополнительных измерений через запятую:
Третий массив состоит из 10000 элементов — 10×10×10×10.
Динамические массивы
Динамические массивы в VBA Excel, в отличие от статических, объявляются без указания размерности:
Такие массивы используются, когда заранее неизвестна размерность, которая определяется в процессе выполнения программы. Когда нужная размерность массива становится известна, она в VBA Excel переопределяется с помощью оператора ReDim:
Переопределять размерность динамических массивов в процессе работы программы можно неоднократно, как по количеству измерений, так и по количеству элементов в измерении.
С помощью оператора ReDim невозможно изменить обычный массив, объявленный с заранее заданной размерностью. Попытка переопределить размерность такого массива вызовет ошибку компиляции с сообщением: Array already dimensioned (Массив уже измерен).
При переопределении размерности динамических массивов в VBA Excel теряются значения их элементов. Чтобы сохранить значения, используйте оператор Preserve:
Максимальный размер
Размер массива – это произведение длин всех его измерений. Он представляет собой общее количество элементов, содержащихся в данный момент в массиве.
По информации с сайта разработчиков, максимальный размер массивов зависит от операционной системы и доступного объема памяти. Использование массивов, размер которых превышает объем доступной оперативной памяти компьютера, приводит к снижению скорости, поскольку системе необходимо выполнять запись данных и чтение с диска.
Использование массивов
Приведу два примера, где не обойтись без массивов.
1. Как известно, функция Split возвращает одномерный массив подстрок, извлеченных из первоначальной строки с разделителями. Эти данные присваиваются заранее объявленному строковому (As String) одномерному динамическому массиву. Размерность устанавливается автоматически в зависимости от количества подстрок.
2. Данные в массивах обрабатываются значительно быстрее, чем в ячейках рабочего листа. Построчную обработку информации в таблице Excel можно наблюдать визуально по мерцаниям экрана, если его обновление (Application.ScreenUpdating) не отключено. Чтобы ускорить работу кода, можно значения из диапазона ячеек предварительно загрузить в динамический массив с помощью оператора присваивания (=). Размерность массива установится автоматически. После обработки данных в массиве кодом VBA полученные результаты выгружаются обратно на рабочий лист Excel. Обратите внимание, что загрузить значения в диапазон ячеек рабочего листа через оператор присваивания (=) можно только из двумерного массива.
Функции Array, LBound, UBound
Функция Array
Функция Array возвращает массив элементов типа Variant из первоначального списка элементов, перечисленных через запятую. Нумерация элементов в массиве начинается с нуля. Обратиться к элементу массива можно, указав в скобках его номер (индекс).
Источник