引用范围 属性 中的多个命名范围时出错

Error when referring to many multiple named ranges in Range property

我有大约 236 个命名范围(列)用于大量 table 数据。尝试拆分分隔的命名范围的长代码行时出现此错误:

Run-time error '1004' Application-defined or object-defined error

例如:

Worksheets("Sheet1").Range("foo1,foo2" _
    & "foo3,foo4" _
    & "..." _
    & "foo235,foo236")

我正在尝试根据特定条件(命名范围)过滤和取消过滤列。一切似乎都工作正常(对于长度仅跨越 1 行的较小字符串),直到我不得不将代码分成多行,因为它到达 window..

的末尾

代码 -

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$B" Then
        Worksheets("Sheet1").Range("Fruit," _
            & "Months,Colour").EntireColumn.Hidden = Target.Value = "CustomView"
    End If

    If Target.Address = "$B" Then
        Worksheets("Sheet1").Range("Colour,Number" _
            & "Months").EntireColumn.Hidden = Target.Value = "Custom2View"
    End If
End Sub

此代码似乎不起作用。我认为这与引号以及 excel 的阅读方式有关,但我还没有找到解决办法。

正在根据评论中的建议测试新代码导致错误 运行-时间错误“1004”应用程序定义或对象定义的错误

Private Sub Worksheet_Change(ByVal Target As Range)

Dim arr, i As Long, rng As Range

If Target.Address = "$B" Then
    arr = Split("foo1,foo2,foo3,...,foo266,foo267", ",")
 Set rng = Worksheets("Database").Range(arr(0))
 For i = 1 To UBound(arr)
 Set rng = Application.Union(rng, Worksheets("Database").Range(arr(i)))
 Next i
 rng.EntireColumn.Hidden = (Target.Value = "CustomView")
End If

End Sub

您可以使用 Application.Union 建立射程,然后 hide/show 一次性射出该射程。

编辑:根据您的第二个共享文件,我认为您需要这样的东西。您之前的代码没有检查 "view name" 单元格的值,而是应用了所有视图,只剩下最后一个...

例如:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim arr, q As Long, rng As Range, sht As Worksheet

    Set sht = Worksheets("Database")

    If Target.Address = "$B" Then

        'unhide all columns forst
        sht.UsedRange.EntireColumn.Hidden = False

        Select Case Target.Value
            Case "CustomView"
                arr = Split("A,B,C_,X,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM," & _
                  "AN,AO,AP,AQ,AR,AS,AT,AV,AW,AX,AY,AZ,BA,BB,BC,BD,BE,BF,BG," & _
                  "BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ,CA," & _
                  "CB,CC,CD,CE,CF,CG,CH,CI,CJ,CK,CL,CU,CV,CW,CX,CY,CZ,DA,DB,DC", ",")
            Case "XX100View"
                arr = Split("D,E,F,G,X,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO," & _
                   "AP,AQ,AR,AS,AT,AV,AW,AX,AY,AZ,BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ," & _
                   "BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ,CA,CB,CC,CD,CE," & _
                   "CF,CG,CH,CI,CJ,CK,CL,CU,CV,CW,CX,CY,CZ,DA,DB,DC", ",")
            Case "OtherView"
                arr = Split("A,B,D,E,F,G,H,I,X,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM," & _
                    "AN,AO,AP,AQ,AR,AS,AT,AV,AW,AX,AY,AZ,BA,BB,BC,BD,BE,BF,BG,BH," & _
                    "BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,BY,BZ,CA,CB," & _
                    "CC,CD,CE,CF,CG,CH,CI,CJ,CK,CL,CU,CV,CW,CX,CY,CZ,DA,DB,DC", ",")
        End Select

        If Not IsEmpty(arr) Then
            Set rng = sht.Range(arr(0))
            For q = 1 To UBound(arr)
                Set rng = Application.Union(rng, sht.Range(arr(q)))
            Next q
            rng.EntireColumn.Hidden = True '<<edited
        End If 'got a view

    End If 'is view name cell
End Sub

PS - 您的范围名称不需要包含所有数据:单个单元格就可以了,因为您使用 EntireColumn 将其扩展到整个 sheet 反正身高。