Массив пользовательского типа - объект для хранения именованных переменных и массивов различных размерностей с максимальной скоростью доступа - VBA
Формулировка задачи:
Недавно открыл для своих целей всю мощь такого объекта.
Решил поделиться.
Цель:
максимальная скорость доступа.
минимальная нагрузка на оперативную память.
не нужно запоминать имена переменных (подсвечиваются, если поставить точку).
возможность хранить внутри каждого из индексов массива другой массив с динамически изменяющейся размерностью.
возможность быстро очистить основной массив.
Поправьте меня, если для моих целей есть другой, более подходящий объект.
Листинг программы
- Option Explicit
- Type Lesson
- Дисциплина As String
- Аудитория As String
- Вид_занятия As String
- Преподаватель() As String
- End Type
- Sub Test()
- Dim Lesson() As Lesson 'Объявляем массив пользовательских типов
- Dim x As Long, y As Long
- y = 1
- x = 2
- 'В каждой клетке у нас много информации о дисциплине
- 'Поэтому будем эту информацию делить сразу и хранить в памяти в удобной форме для быстрого доступа
- 'Расширяем размерность на одну строку и 2 клетки (2 дисциплины)
- ReDim Lesson(1 To y, 1 To x)
- 'Дисциплину № 1 ведут 2 преподавателя
- ReDim Lesson(1, 1).Преподаватель(1 To 2)
- Lesson(1, 1).Дисциплина = "Огневая"
- Lesson(1, 1).Вид_занятия = "Экзамен"
- Lesson(1, 1).Аудитория = "ауд.333"
- Lesson(1, 1).Преподаватель(1) = "Петров"
- Lesson(1, 1).Преподаватель(2) = "Сидоров"
- 'Дисциплину № 2 ведут 3 преподавателя
- ReDim Lesson(1, 2).Преподаватель(1 To 3)
- Lesson(1, 2).Дисциплина = "Тактика"
- Lesson(1, 2).Вид_занятия = "Курсовая работа"
- Lesson(1, 2).Аудитория = "ауд.111"
- Lesson(1, 2).Преподаватель(1) = "Петров"
- Lesson(1, 2).Преподаватель(2) = "Сидоров"
- Lesson(1, 2).Преподаватель(3) = "Иванов"
- 'Изменяем размерность подмассива
- Stop
- ReDim Preserve Lesson(1, 2).Преподаватель(1 To 2) 'Test OK
- 'Изменяем размерность главного массива
- Stop
- ReDim Preserve Lesson(1 To 1, 1 To 1) 'Test OK
- 'очистка подмассива
- Stop
- Erase Lesson(1, 1).Преподаватель 'Test OK
- 'очистка главного массива
- Stop
- Erase Lesson 'Test OK
- Stop
Решение задачи: «Массив пользовательского типа - объект для хранения именованных переменных и массивов различных размерностей с максимальной скоростью доступа»
textual
Листинг программы
- Private Type User_Type
- l_arr() As Long
- s_var As String
- End Type
- Private Sub Form_Load()
- Dim UT() As User_Type
- ReDim UT(0)
- With UT(0)
- ReDim .l_arr(1000)
- .s_var = String$(1000, 0)
- End With
- Debug.Print LenB(UT(0))
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д