我一直在努力解决数组问题,请参阅此处:(Excel VBA - Arrays for Data Validation Reference)
我想尝试简化以确定它是否更有意义。
假设我有一组范围,每个都有一个名字; Range1,Range2等我将每个命名范围设置为一个数组; MyArray1,MyArray2等我然后把这些数组放在一个数组中; ContainerArray
我有另一个名为ReferenceArray的数组,它基于命名范围; RangeRef;其中包含值Ref1,Ref2,Ref3
参考阵列填充数据验证列表1。
问题陈述:
如果用户选择(例如)数据验证列表1中的Ref1,我想触发数据验证列表2以填充ContainerArray中的相应数组(因此它将填充MyArray1中的值)... < / p>
类似的东西:
If Data Validation List 1.Selection = ReferenceArray(i) then
Data Validation List 2 Options = ContainerArray(i)
Endif
感谢任何帮助。提前谢谢!
答案 0 :(得分:0)
如果你google&#34;数组阵列&#34;您将找到有关如何完成此操作的大量信息,包括以下示例:How do I set up a "jagged array" in VBA?
但是,根据我在其他主题的评论,为什么要使用VBA呢?没有充分理由,这根本不是一个好方法。你过度复杂了。使用动态命名范围,查看我在其他主题中链接的示例。
答案 1 :(得分:0)
我整理了一个解决方案,虽然没有使用命名范围,只是简单地使用在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列表中选择了不同的选项,代码将需要更新此代码的内容。