我一直在为数组问题而苦苦挣扎,请参阅此处:(Excel VBA - 用于数据验证参考的数组)
我想尝试简化,看看它是否更有意义。
假设我有一组范围,每个范围都有一个名称;范围 1、范围 2 等我将每个命名范围设置为一个数组;MyArray1、MyArray2 等然后我把这些数组放在一个数组中;容器数组
我有另一个名为 ReferenceArray 的数组,它基于命名范围;范围参考;包含值 Ref1、Ref2、Ref3
引用数组填充数据验证列表 1。
问题陈述:
如果用户在数据验证列表 1 中选择(例如)Ref1,我想触发数据验证列表 2 填充 ContainerArray 中的相应数组(这样它就会填充 MyArray1 中的值)...
像这样:
If Data Validation List 1.Selection = ReferenceArray(i) then
Data Validation List 2 Options = ContainerArray(i)
Endif
任何帮助,不胜感激。提前谢谢你!
如果你谷歌"数组数组",你会发现很多关于如何完成此操作的信息,包括这个SO示例: 如何在 VBA 中设置"交错数组"?
但是,根据我在您的其他线程上的评论,为什么要使用 VBA?没有充分的理由,这根本不是一个好方法。你把它复杂化了。使用动态命名范围,并查看我在另一个线程中链接到的示例。
我整理出了一个解决方案,尽管没有使用命名范围,而只是使用在 vba 中创建的数组。但就我想要的参考而言,它可以毫无问题地工作!:)
Sub Test()
Dim Array_DV1 As Variant
Array_DV1 = Array("Array X", "Array Y", "Array Z")
Range("DV_1").Offset(1, 0).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, Formula1:=Join(Array_DV1, ",")
.IgnoreBlank = True
.InCellDropdown = True
End With
Dim Array_X As Variant
Array_X = Array("X1", "X2", "X3")
Dim Array_Y As Variant
Array_Y = Array("Y1", "Y2", "Y3", "Y4")
Dim Array_Z As Variant
Array_Z = Array("Z1", "Z2", "Z3", "Z4", "Z5")
Dim Array_XYZ As Variant
Array_XYZ = Array(Array_X, Array_Y, Array_Z)
For i = LBound(Array_DV1) To UBound(Array_DV1)
If Range("DV_1").Offset(1, 0).Value = Array_DV1(i) Then
Range("DV_2").Offset(1, 0).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, Formula1:=Join(Array_XYZ(i), ",")
.IgnoreBlank = True
.InCellDropdown = True
End With
End If
Next
End Sub
旁注:如果用户在第一个 dv 列表中选择不同的选项,代码将需要一些东西来更新此代码。