Excel VBA - 访问填充了命名区域的数组



我一直在为数组问题而苦苦挣扎,请参阅此处:(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 列表中选择不同的选项,代码将需要一些东西来更新此代码。

最新更新