продолжить это обсуждение в чате
я есть следующий код:
Sub TEST_____________Data_Validation_Machine()
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim Range1 As Range, Range2 As Range
Dim c As Range
Dim Array_Fab As Variant
Dim Array_Paint As Variant
Dim Array_Sub As Variant
Dim Array_Asy As Variant
Dim Array_Facilities As Variant
Dim Array_Machine_List_Choices As Variant
Set ws = ThisWorkbook.Worksheets("EOS Report")
Set ws2 = ThisWorkbook.Worksheets("MachineList")
Set ws3 = ThisWorkbook.Worksheets("PlantAreaList")
With ws2
'creating arrays based on the named ranges on the sheet "MachineList"
Array_Fab = Application.Transpose(.Range("MACHINESFAB"))
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 of Arrays
Array_Machine_List_Choices = Array(Array_Fab, Array_Paint, Array_Sub, Array_Asy, Array_Facilities)
With ws3
'creating an array based on the named range on the sheet "PlantAreaList"
Array_Plant_Area_Choices = Application.Transpose(.Range("PlantAreaListCells"))
End With
'Cell below "MACHINE" based on the activecell selection of the "Plant Area" combobox:
Set Range1 = ActiveCell.Offset(0, 1)
'Cell below "PLANT AREA", based on the user selection of the combobox:
Set Range3 = ActiveCell
Для этой следующей части, как бы я кодировал: если range3 = Array_Plant_Area_Choices, то range2 = соответствующий Array_Machine_List_Choices
If Range3 = "" Then
Set Range2 = ""
For Each c In Range1
If c.Interior.Pattern <> xlNone Then
Else
With c.Validation
.Delete
.Add Type:=xlValidateList, _
Formula1:="='" & ws2.Name & "'!" & Range2.Address
.IgnoreBlank = True
.InCellDropdown = True
End With
End If
Next
Application.ScreenUpdating = True
End Sub
Этот код создает окно проверки данных, в котором варианты выбора основаны на предыдущем окне проверки данных, которое пользователь уже заполнил. В настоящее время есть несколько операторов if для каждого первоначального выбора, но я добавлю еще тонну, и это может замедлить программу, а также просто выглядеть грязно. Я надеюсь, что смогу использовать массивы, чтобы сделать этот процесс намного чище.
Любая помощь приветствуется! Заранее спасибо!