Я тщательно изучил эту тему и еще не нашел код, который работает для выполнения того, что мне нужно сделать. В двух словах я создаю программу отслеживания производства, и ее функция, на которой я сейчас работаю, включает точное отслеживание дней отпуска для 5 сотрудников. Пользовательская форма, содержащая 5 списков, по одному для каждого сотрудника, используется для выбора дней, в которые каждый сотрудник ушел на неделю. Проблема возникает, когда я пытаюсь создать уникальные динамические массивы, содержащие выходные дни каждого сотрудника. Я понял, как создать массив, который захватывает эту информацию, но это один массив, который получает переназначение каждый раз, когда цикл повторяется. Мне нужно иметь уникальный массив для каждого сотрудника, содержащего его выходные, который будет использоваться позже в коде, чтобы настроить еженедельный подсчет в зависимости от его доступных дней работы. Ниже мой код в UserForm для, чтобы создать создать зазубренный массив:VBA Excel 2003/2007: Объявление, заполнение и передача массива Jagged
Public Name_Jagged() As Variant
For Each Name In Name_Array
Set Unique_Listbox = Controls(Name & "_Vacation")
For UnSelected = 0 To Unique_Listbox.ListCount - 1
If Unique_Listbox.Selected(UnSelected) = False Then
ReDim Preserve Name_Jagged(0 To UBound(Name_Jagged) + 1)
Name_Array(Name) = Name_Jagged()
Name_Jagged(UBound(Name_Jagged)) = Unique_Listbox.List(UnSelected)
End If
For UnSelected_Array_Pos = LBound(Name_Jagged) To UBound(Name_Jagged)
MsgBox Name & "_" & Name_Jagged(UnSelected_Array_Pos)
Next UnSelected_Array_Pos
Next UnSelected
Next Name
компилятор не позволит мне использовать Public Name_Jagged()() As Variant либо, несмотря на большинство других форумах говорят, что это, как это предполагалось для написания. Единственное сообщение, которое я нашел в Интернете по поводу этой проблемы с объявлением массива, не получил ответа.
Я был бы очень признателен за вашу помощь. Мне удалось выяснить все, что осталось от предыдущих тем, но это ускользнуло от меня. Если для этого есть лучший вариант, чем зубчатые массивы, я все уши. Я читал на некоторых форумах об использовании списков, но я ничуть не знаком с ними или как их использовать на данный момент. Заранее спасибо за помощь.
Вот несколько других ответов о Jagged Arrays, которые могут помочь [one] (http://stackoverflow.com/a/18542133/445425) [два] (http://stackoverflow.com/a/20793748/ 445425) [три] (http://stackoverflow.com/a/12382183/445425) –
Вы можете * ссылаться на * вложенные функции, свойства и массивы в VBA с выражениями, такими как 'variable = Name_Jagged()()'. Это работает, я это сделал. То, что вы можете * не сделать, - это прямое * объявить * вложенный массив в VBA. Итак, это: 'Public Name_Jagged()() As Variant' является незаконным синтаксисом, и любой форум, в котором говорится, что он работает, неверен. Единственными способами построения вложенных массивов в VBA являются ручные: хотя и варианты или пользовательские классы, реализующие подобный массиву интерфейс. – RBarryYoung
Примечание: ссылочная форма i, упомянутая выше, должна быть 'variable = Name_Jagged (i) (j)'. – RBarryYoung