excel 在自动筛选中使用定义名称功能

oxf4rvwz  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(111)

我是新来的。希望你能耐心点。

**我的目标:**自动过滤,但过滤器是在一个可编辑的表中,以方便调整过滤器。因此,我在代码中使用了定义的名称。
定义的名称:

  1. ShName -用户名
    1.第1列-色谱柱编号
    1.过滤器1 -第一个过滤器,这样我的目标也是数组形式的过滤器,即,不必手动将代码修改为Criteria:= Array(Range().Value),我可以简单地将Criteria:= Range().Value

The Table

| | B| B |
| --|--|--|
| 1 |上校|滤波器|
| 2 |1 (列1)| 一个值 (筛选器1)|
| 3 |2 (Col2)|(值1,值2,值3)(筛选器2)|

  • B3仅指1个过滤器,而B3指阵列
    我的验证码:
Sub filter()
Worksheets(Range("ShName").Value).Activate

If IsEmpty(Range("Col 1").Value) = True Then 
   Go To Done
   Else: ActiveSheet.Range("A1").AutoFilter Field:=Range("Col1").Value, Criteria:=Range("Filter1"), Operator:= xlFilterValues 'Error starts to pop up
End If

If IsEmpty(Range("Col 2").Value) = True Then 
   Go To Done
   Else: ActiveSheet.Range("A1").AutoFilter Field:=Range("Col2").Value, Criteria:=Range("Filter2"), Operator:= xlFilterValues
End If

Done:

End Sub

字符串

**我的问题:**在AutoFilter中调用定义的名称时立即弹出错误

感谢你的帮助谢谢

rvpgvaaj

rvpgvaaj1#

  • 请确定您的命名范围使用有效的名称。像“Col 1”和“Col1”这样的名称是无效的,而Col_1是可以接受的选项。
  • 此外,请考虑使用Exit Sub而不是Goto,以改善程式码的可读性和可维护性。
  • 输入Value1,Value2,Value3(不带括号和空格)为Filter2,很容易用Split函数为第二个过滤器生成一个数组。
Option Explicit

Sub ApplyFilter()

    Dim oRng As Range
    Worksheets(Range("ShName").Value).Activate
    Set oRng = ActiveSheet.Range("A1").CurrentRegion
    If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
    
    If IsEmpty(Range("Col_1").Value) Then
        Exit Sub
    Else
        oRng.AutoFilter Field:=Range("Col_1").Value, Criteria1:=Range("Filter1")
    End If
    
    If IsEmpty(Range("Col_2").Value) Then
        Exit Sub
    Else
        oRng.AutoFilter Field:=Range("Col_2").Value, _
        Criteria1:=Split(Range("Filter2"), ","), Operator:=xlFilterValues
    End If

End Sub

字符串

  • Microsoft文档:*

Split function
AutoFilter object (Excel)
顺便说一句,通过在下面建议的布局中组织单元格,可以更方便地在工作簿中创建和管理定义的名称。


的数据

相关问题