【问题标题】:using a wildcard to prevent subtotal line from being filtered and copied excel vba使用通配符防止小计行被过滤和复制excel vba
【发布时间】:2018-03-19 23:39:06
【问题描述】:

我有一个销售人员列表,该列表被过滤并将所有过滤后的数据移动到它自己的电子表格中。我遇到的问题是宏也在过滤小计行,因此它创建了一个没有数据的工作表,并且还造成了工作表太大而无法保存文件的情况。

我写了一些我认为可以防止任何以“Sheet”开头的工作表不被过滤的代码,但我不知道如何在字符串中使用通配符。需要通配符,因为“Sheet #”因月份而异。

Dim Sht As Worksheet
        Dim Rng As Range
        Dim List As Collection
        Dim varValue As Variant
        Dim E As Long

    '   // Set your Sheet name
        Set Sht = Application.ActiveSheet

    '   // set your auto-filter,  A6
        With Sht.Range("A2")
            .AutoFilter
        End With

    '   // Set your agent Column range # (2) that you want to filter it
        Set Rng = Range(Sht.AutoFilter.Range.Columns(22).Address)


ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add 
Key:=Range _
         ("V:V"), SortOn:=xlSortOnValues, Order:=xlAscending, 
DataOption:= _
            xlSortTextAsNumbers
        With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

    '   // Create a new Collection Object
        Set List = New Collection

    '   // Fill Collection with Unique Values
        On Error Resume Next
        For E = 2 To Rng.Rows.Count
            List.Add Rng.Cells(E, 1), CStr(Rng.Cells(E, 1))
        Next E

    '   // Start looping in through the collection Values
        For Each varValue In List


    '       // Filter the Autofilter to macth the current Value
            'Rng.AutoFilter Field:=22, Criteria1:=varValue, _
             '   Operator:=xlAnd, Criteria2:="<>"

            Rng.AutoFilter Field:=22, Criteria1:="<>Sheet*", _
                Operator:=xlAnd, Criteria2:=varValue

    '       // Copy the AutoFiltered Range to new Workbook
            'If List = (Blanks) Then
            Sht.AutoFilter.Range.Copy

Criteria1:="Sheet*" 代码是我尝试做的,上面的代码是以前的。所以我的问题是如何防止创建小计行表?

【问题讨论】:

    标签: vba excel filtering copy-paste


    【解决方案1】:

    不要将工作表名称添加到自动筛选条件。只需在自动过滤之前检查工作表名称即可。

    If Not ActiveSheet.Name Like "Sheet*" Then
        'Do whatever you need to do
    End If
    

    另一方面,如果您想包含以 sheet 开头的工作表名称,则可以删除 Not 关键字:

    If ActiveSheet.Name Like "Sheet*" Then
    

    【讨论】:

      【解决方案2】:

      将时间戳附加到您的工作表名称字符串。基本思想是使用“时间”函数,即时间(现在),其中时间可以提取为yy,mm,dd,hh,ss。单独定义变量字符串以存储每个所需的时间分量。然后,创建一个像sheetname= myname string+my dd+ my hh.... 这样的名称,我认为如果您尝试将时间结果直接添加到您的 sheetname 字符串中可能会出现问题,因此请先保存时间结果,然后再组合字符串。

      我喜欢通过使用sheets(1).name ="blank" 设置我的工作簿来开始我的项目。隐藏它,取消隐藏它,并永久复制它。 祝你好运。

      【讨论】:

        【解决方案3】:

        所以在玩了一段时间代码后,我意识到使用通配符表示“Sheet*”是行不通的,因为所有过滤后的结果都以“Sheet”开头。但是通过添加

        If varValue &lt;&gt; "" Then(表示如果过滤结果不为空,则继续代码)Rng.AutoFilter Field:=22, Criteria1:="&lt;&gt;Sheet*", Operator:=xlAnd, Criteria2:=varValue 之后

        它解决了这个问题。现在代码成功跳过了小计行。

        【讨论】:

          猜你喜欢
          • 2015-08-28
          • 2014-03-30
          • 2012-12-07
          • 1970-01-01
          • 2018-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多