Массив - это набор элементов определенного типа, каждый из которых имеет свой порядковый номер, называемый индексом. Различают массивы статические и динамические.
Границы статического массива устанавливаются на этапе разработки и могут изменяться только в новой версии программы.
Динамические массивы изменяют свои границы в ходе выполнения программы.
Статические массивы нельзя определить локально внутри процедуры, а только глобально или для контейнера.
[Static| Public| Dim] Имя_массива([ Нижн_предел To] Верхн_предел) [ As Тип_данных]
Динамический массив создается в два этапа. Сначала массив определяют в секции (General) (Declarations) контейнера (Form, Module) без указания размера. Затем с помощью оператора ReDim устанавливают фактический размер массива:
Синтаксис оператора ReDim:
ReDim [Preserve] Имя_массива(Границы) [ As Тип_данных]
В отличие от Dim оператор ReDim используется только в процедурах. При этом тип данных указывать не обязательно, особенно если он уже определен оператором Dim. Использование ключевого слова Preserve позволяет сохранить содержимое массива при изменении его размерности (однако, для многомерных массивов можно изменять только последнее измерение).
Пример:
'(General) (Declarations)
Dim a() As Variant
Private Sub Command1_Click()
ReDim Preserve a(5,10)
.......
End Sub
Область видимости динамических массивов (контейнерных, глобальных) определяется способом их объявления:
Public – глобальный;
Dim - контейнерный.
При необходимости определения фактического размера массива используются встроенные функции:
Lbound(массив, размерность) - нижняя граница.
Ubound(массив, размерность) - верхняя граница.
Пример ввода данных в динамический массив:
Dim ms() As String
Private Sub Command1_Click()
Cls
ReDim ms(0)
s = "Начало работы"
Do Until s = ""
s = InputBox("введите фамилию")
ms(UBound(ms)) = s
ReDim Preserve ms(UBound(ms) + 1)
Loop
ReDim Preserve ms(UBound(ms) - 1)
For i = 0 To UBound(ms)
Print i; " "; ms(i)
Next i
End Sub
VISUAL BASIC позволяет использовать массив в качестве передаваемого в процедуру параметра и в качестве возвращаемого функцией значения.
Пример передачи массива в качестве параметра массива:
Public Sub srt(b() As Integer)
Dim i As Integer, f As Integer, k As Integer
Do
f = 0
For i = LBound(b) To UBound(b) - 1
If b(i) > b(i + 1) Then
k = b(i): b(i) = b(i + 1): b(i + 1) = k: f = 1
End If
Next
Loop While f = 1
End Sub
Private Sub Command1_Click()
Dim a(1 To 5) As Integer
Dim i As Integer
For i = 1 To 5
a(i) = Val(InputBox("Введите число"))
Next
Call srt(a)
Cls
For i = 1 To 5
Print a(i);
Next
End Sub
Пример функции, возвращающей массив:
Public Function VV(ByVal n As Byte) As Byte()
Dim x(1 To n) As Byte, i As Byte
For i = 1 To n
x(i) = Val(InputBox("Введите число"))
Next
VV=x
End Function
Private Sub Commnd1_Click()
Dim b() As Byte, i As Byte
B()=VV(10) ‘вызов функции
For i = 1 To 10
Print b(i)
Next
End Sub