2014-01-22 4 views
1

Я тщательно изучил эту тему и еще не нашел код, который работает для выполнения того, что мне нужно сделать. В двух словах я создаю программу отслеживания производства, и ее функция, на которой я сейчас работаю, включает точное отслеживание дней отпуска для 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 либо, несмотря на большинство других форумах говорят, что это, как это предполагалось для написания. Единственное сообщение, которое я нашел в Интернете по поводу этой проблемы с объявлением массива, не получил ответа.

Я был бы очень признателен за вашу помощь. Мне удалось выяснить все, что осталось от предыдущих тем, но это ускользнуло от меня. Если для этого есть лучший вариант, чем зубчатые массивы, я все уши. Я читал на некоторых форумах об использовании списков, но я ничуть не знаком с ними или как их использовать на данный момент. Заранее спасибо за помощь.

+0

Вот несколько других ответов о Jagged Arrays, которые могут помочь [one] (http://stackoverflow.com/a/18542133/445425) [два] (http://stackoverflow.com/a/20793748/ 445425) [три] (http://stackoverflow.com/a/12382183/445425) –

+0

Вы можете * ссылаться на * вложенные функции, свойства и массивы в VBA с выражениями, такими как 'variable = Name_Jagged()()'. Это работает, я это сделал. То, что вы можете * не сделать, - это прямое * объявить * вложенный массив в VBA. Итак, это: 'Public Name_Jagged()() As Variant' является незаконным синтаксисом, и любой форум, в котором говорится, что он работает, неверен. Единственными способами построения вложенных массивов в VBA являются ручные: хотя и варианты или пользовательские классы, реализующие подобный массиву интерфейс. – RBarryYoung

+0

Примечание: ссылочная форма i, упомянутая выше, должна быть 'variable = Name_Jagged (i) (j)'. – RBarryYoung

ответ

0

Просто мысль, но почему у вас 5 статических списков для каждого сотрудника? Почему бы не просто иметь 1 список, в котором указаны имена сотрудников и 1 список, в котором указаны дни недели. Вы выделяете сотрудника, которого хотите, и выберите дни, которые они сняли. Нажмите кнопку отправки, которая будет загружать имя сотрудников в массив с выбранными днями? Массив может быть структурирован следующим образом:

ИМЯ | ПОНЕДЕЛЬНИК | ВТОРНИК | СРЕДА | ЧЕТВЕРГ | ПЯТНИЦА | СУББОТА | Воскресенья

ДЖИМ ..... OFF ............ OFF

ERIC .................. ..... OFF ............. OFF

И так далее. Таким образом, если вам нужно добавить людей в будущем, вы просто добавите их в список. Вы могли бы иметь один простой массив?

Также вы сказали «которые будут использоваться позже в коде, чтобы настроить еженедельную счет в зависимости от имеющихся у него дней работы»

предложение; Вы можете захотеть записать его в простую базу данных mysql/mssql, которая дает вам большую гибкость и контроль в будущем.

Смежные вопросы