В общей части Вы должны описать структуру и объявить переменную типа этой структуры. Смотрите картинку.
Итак мы создадим тип с элементами x,y, типа Integer и с с типом Variant. Ох уж этот Variant, он позволяет нам в структуру помещать все, что угодно. Хоть массив. Мы то сделаем. Но разве Вас не впечатляет простота и мощь. Ведь так можно создать структуры любой сложности очень просто. Нет OLE, нет указателей. После C++ это просто сказка.
' Описание
Private Type MyType
x As Integer
y As Integer
c As Variant
End Type
Sub Test()
'--------------------------
' Область функции
Sub Test()
Dim a(2) As MyType
Dim arrays(2) As String
arrays(1) = "Hello"
arrays(2) = "Cool"
a(1).x = 1
a(1).y = 2
a(1).c = arrays
a(2).x = 10
a(2).y = 20
arrays(1) = "Hello 2"
arrays(2) = "Cool!!!"
a(2).c = arrays
Debug.Print "a1"
Debug.Print a(1).c(1)
Debug.Print a(1).c(2)
Debug.Print "a2"
Debug.Print a(2).c(1)
Debug.Print a(2).c(2)
End Sub
Во всем этом есть и подводный камень. Создавать структуры можно только на уровне модуля. Не зря она у нас Private. Но можно создавать классы, которые умеют с ними работать:-) Это несколько радует.
Для просмотра результата Вам необходимо открыть окно отладки. Это можно сделать в меню Вид - Окно отладки (CTRL-G).
|
|
Вот такой результат вы должны увидеть:
a1
Hello
Cool
a2
Hello 2
Cool!!!
Шаг 22 - For Each
Этот цикл придуман для того, чтобы облегчить дествия над массивами и наборами. Он позволяет произвести однотипные операции над всем массивом. Описание его такое:
For Each переменная In массив
Действия
Next переменная
Переменная должна иметь тип Variant или Object, в котором можно хранить практически всё. Пример? Пожалуйста.
Sub Test()
Dim arrays(1) As String
arrays(0) = "Hello"
arrays(1) = "Each:-)"
Dim vari As Variant
For Each vari In arrays
MsgBox (vari + " - Steps")
Next vari
End Sub
For Each очень удобен для работы с коллекциями. Вот так можно пробежаться по открытым кигам.
Sub Test()
Dim vars As Variant
For Each vars In Workbooks
MsgBox (vars.Name)
Next vars
End Sub
Или по листам книги:
Sub Test()
Dim vars As Variant
For Each vars In Workbooks.Item("Test.xls").Sheets
MsgBox (vars.Name)
Next vars
End Sub