繁体   English   中英

Excel VBA-访问使用命名范围填充的数组

[英]Excel VBA - Accessing Arrays that are Populated with Named Ranges

我一直在努力解决数组问题,请参见此处:( Excel VBA-数组用于数据验证参考

我想尝试简化一下,看看是否更有意义。

可以说我有一组范围,每个范围都有一个名称。 Range1,Range2等。我将每个命名范围设置为一个数组。 然后,将MyArray1,MyArray2等放入一个数组中。 容器数组

我还有一个名为ReferenceArray的数组,该数组基于命名范围; RangeRef; 其中包含值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

任何帮助表示赞赏。 先感谢您!

如果您用Google搜索“数组数组”,您将找到许多有关如何完成此操作的信息,包括下面的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列表中选择其他选项,则该代码将需要一些内容来更新此代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM