Excel VBA Nested Array для предоставления выбора имени пользователя на основе выбора раздела

Я пытаюсь (в конечном итоге) заполнить проверку данных конкретными вариантами, исходя из выбора пользователей в первом (или основном) окне проверки данных. В настоящее время мне нужно разобраться в этом вложенном массиве, так как я считаю, что это будет первый шаг к решению этой проблемы. Однако я не могу заставить этот вложенный массив заполнить. Заранее спасибо!

Sub Test_NestedArray() Dim ws as Worksheet Set ws = Worksheet("EOS Report") Dim Array_Machine_List_Choices As Variant Dim Array_Fab Dim Array_Paint Dim Array_Sub Dim Array_Asy Dim Array_Facilities Array_Fab = Array(Range(MACHINESFAB)) 'referencing named ranges on the sheet Array_Paint = Array(RANGE(MACHINESPAINT)) Array_Sub = Array(RANGE(MACHINESSUB)) Array_Asy = Array(RANGE(MACHINESASY)) Array_Facilities = Array(RANGE(MACHINESFACILITIES) Array_Machine_List_Choices = Array(Array_Fab, Array_Paint, Array_Sub, Array_Asy, Array_Facilities) MsgBox (Array_Machine_List_Choices(1)) 'see the array choices for Paint End Sub 

Un / комментарий при необходимости. Надеюсь, хотя это показывает, что вам нужно немного больше, чем комментарии

 Sub Test_NestedArray() Dim ws As Worksheet Dim Array_Fab As Variant, Array_Paint As Variant, Array_Sub As Variant Dim Array_Asy As Variant, Array_Facilities As Variant, Array_Machine_List_Choices As Variant Set ws = Worksheets("EOS Report") ' Assuming all your ranges are in this worksheet. If not delete the With and the End With and the .'s in front of Range With ws ' ' If data is in a single row with multiple columns ' Array_Fab = Application.Transpose(Application.Transpose(Range("MACHINESFAB"))) 'referencing named ranges on the sheet ' Array_Paint = Application.Transpose(Application.Transpose(Range("MACHINESPAINT"))) ' Array_Sub = Application.Transpose(Application.Transpose(Range("MACHINESSUB"))) ' Array_Asy = Application.Transpose(Application.Transpose(Range("MACHINESASY"))) ' Array_Facilities = Application.Transpose(Application.Transpose(Range("MACHINESFACILITIES"))) ' If data is in a single column with multiple rows Array_Fab = Application.Transpose(Range("MACHINESFAB")) 'referencing named ranges on the sheet Array_Paint = Application.Transpose(Range("MACHINESPAINT")) Array_Sub = Application.Transpose(Range("MACHINESSUB")) Array_Asy = Application.Transpose(Range("MACHINESASY")) Array_Facilities = Application.Transpose(Range("MACHINESFACILITIES")) End With Array_Machine_List_Choices = Array(Array_Fab, Array_Paint, Array_Sub, Array_Asy, Array_Facilities) MsgBox Join(Array_Machine_List_Choices(1), vbNewLine) 'see the array choices for Paint End Sub 

Application.Transpose – это способ преобразования диапазона в 1D-массив. Если вы установите Array на аранжировку, он создает 2D-массив (даже если вы ссылаетесь только на один столбец) Итак, в следующем примере

 +----+ | A1 | +----+ | A2 | +----+ | A3 | +----+ | A4 | +----+ 

Чтобы получить доступ к элементу A1 вам нужно будет ссылаться на него как на Array(1,1) (а не на Array(0,0) поскольку установка диапазона в массив использует Base 1 )

Используя трюк Application.Tranpose Excel создает массив 1D, поэтому вы можете ссылаться на него как на Array(1) . Что, во-первых, упрощает обращение, а во-вторых (и что более важно) позволяет использовать множество функций Array, таких как Join и Filter которые не работают на 2D-массивах (Excel не имеет встроенных функций для 2D массивы)

  • Список всех объектов проверки в листе с помощью Excel Interop без повторения каждой ячейки
  • С помощью кнопки «Копировать вставить в ячейку проверки данных» ее не работает
  • EXCEL VBA: цветовое кодирование данных проверки данных программно в раскрывающемся списке и вставка в ячейку
  • Измените значение ячейки на основе введенного значения
  • Почему после изменения с 2007 года диапазон ячеек проверки данных Excel 2013 изменится?
  • Проверка диапазона с помощью Excel с помощью C #
  • Excel VBA Validation List set Значение по умолчанию
  • Проверка данных Динамический диапазон перемещает диапазон вместо расширяющегося диапазона
  • Использование CONCATENATE в поле источника проверки для ссылки на именованную таблицу
  • Есть ли способ инвертировать таблицу для изменения заголовков столбцов?
  • Как проверить ячейку, используя диапазон из ListObject в Excel?
  • Interesting Posts

    Динамический диапазон Excel VBA и увеличение на 10

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

    Поиск текста ячейки с одного листа, на другом листе, затем смещение с помощью vba

    C # Gridview в Excel с форматированием чисел и строкой таблицы

    Запуск сценария R в Excel с помощью команды Shell в VBA

    Как отправить одно электронное письмо от excel-vba, если есть тот же адрес электронной почты, но разные данные

    excel index match возвращает уникальное значение (без дублирования) top 3 list

    Как написать fomular, который определяет, разрешены ли все задачи внутри группы, кроме одного?

    Некоторый текст Отсутствует в xlsx для текста в c # asp.net

    Даты автозаполнения в Excel в течение определенного месяца

    VBA создает сводную таблицу для xlsx с более чем 69 000 строк

    Mac OS Excel VBA – Сохранить как текстовый файл CSV – результат для разделения по столбцу

    TestNG: как перезапустить тестовый пакет на основе количества строк в файле Excel

    Сохранение имен изображений с их размерами в файл в Windows

    в чем разница между столбцами EMPTY и BLANK из excel

    Давайте будем гением компьютера.