VBA Excel日期过滤器,多个文件

VBA Excel日期过滤器,多个文件,vba,excel,range,filtering,date-range,Vba,Excel,Range,Filtering,Date Range,我对VBA还比较陌生,但正在学习。 我的目标是加快一些每日总结 我在清除过滤器时遇到了一个问题(如果某些过滤器被放在另一个字段上),当没有过滤器时,我会得到一个错误 我无法根据单元格值获得正确的格式,没有错误,它只是选择空白 不知道如何选择过滤范围,我想出了一个,但一定有更好的方法 如果有人知道一些很好的摘要/教程如何选择没有对象表的范围,请给我一个链接 它是Biger宏的一部分,所以声明是在更早的时候进行的,它们在不同的部分工作,所以它们不是问题所在 Sub aktualizacja_SKU(

我对VBA还比较陌生,但正在学习。 我的目标是加快一些每日总结

  • 我在清除过滤器时遇到了一个问题(如果某些过滤器被放在另一个字段上),当没有过滤器时,我会得到一个错误

  • 我无法根据单元格值获得正确的格式,没有错误,它只是选择空白

  • 不知道如何选择过滤范围,我想出了一个,但一定有更好的方法

  • 如果有人知道一些很好的摘要/教程如何选择没有对象表的范围,请给我一个链接

    它是Biger宏的一部分,所以声明是在更早的时候进行的,它们在不同的部分工作,所以它们不是问题所在

    Sub aktualizacja_SKU()
        Set wbThis = ActiveWorkbook
    
        var1 = DATA.Value 
    
        With SKU_table
            lr1 = .Range.Rows.Count
        End With
        strPath = "C:\Users\###\Desktop\###\"
        strFile = "###.xlsm"
        Set wbTarget = Workbooks.Open(strPath & strFile)
    
        wbTarget.Activate
    
    第一个问题:我试图用“但不起作用”来解决下面缺少过滤线的错误

        'Sheets("Zamówienie").Range("$A$3:$V$100000").AutoFilter Field:=11, 
        '    Criteria1:="SPM"
        'Sheets("Zamówienie").ShowAllData
    
    第二个:它忽略日期上带有过滤器的行,并选择一个空白

        Sheets("Zamówienie").Range("$A$3:$V$100000").AutoFilter Field:=4
        Sheets("Zamówienie").Range("$A$3:$V$100000").AutoFilter Field:=4, 
        Criteria1:=Format(var1, "yyyy-mm-dd") ', Operator:=xlOr
        Sheets("Zamówienie").Range("$A$3:$V$100000").AutoFilter Field:=11
        Sheets("Zamówienie").Range("$A$3:$V$100000").AutoFilter Field:=11, 
        Criteria1:="SPM" ', Operator:=xlOr
        Sheets("Zamówienie").Range("$A$3:$V$100000").AutoFilter Field:=14
        Sheets("Zamówienie").Range("$A$3:$V$100000").AutoFilter Field:=14, 
            Criteria1:="Lack of delivery"
        Sheets("Zamówienie").Select
    
    
        Range("C3:F3").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.SpecialCells(xlCellTypeVisible).Copy
    
        wbThis.Activate
    
    三,。我用标题复制所有范围,然后删除它,通常我会将数据更改为表,但我不能更改数据源

        SKU_table.DataBodyRange(lr1, 1).PasteSpecial Paste:=xlPasteValues, 
            Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        SKU_table.ListRows(lr1).Delete
    
    End Sub
    
    请你解释一下新行的功能,或者发送一个到教程的链接。 我宁愿理解,而不是复制粘贴

    第一个问题

    要安全地消除以前的任何筛选器,请不要使用
    工作表。ShowAllData
    ;改用
    工作表。AutoFilterMode=False
    。i、 e

    Sheets("Zamówienie").AutoFilterMode = False
    
    第二个问题

    若要筛选日期,假设您的列已格式化为日期,并且
    var1
    date
    或number变量,只需使用该变量,而不是
    Format
    即可。此外,您不需要两条
    Autofilter
    语句,只需要一条。当然,不需要使用
    选择
    (您不需要它,它是bug的来源)

    第三个问题

    要在不使用标题的情况下进行复制,请使用
    .Offset(1).copy
    ,无需使用
    特殊单元格(xlCellTypeVisible)
    ,因为
    copy
    方法会自动执行此操作

    Sub aktualizacja_SKU()
        Dim var1 As Date: var1 = Data.value
        Const strPath As String = "C:\Users\###\Desktop\###\"
        Const strFile As String = "###.xlsm"
        Dim wbTarget As Workbook: Set wbTarget = Workbooks.Open(strPath & strFile)
        With wbTarget.Sheets("Zamówienie").Range("$A$3:$V$100000")
          .AutoFilter 11, "SPM"
          .AutoFilter 4, var1
          .AutoFilter 14, "Lack of delivery"
          .Columns("C:F").Offset(1).Copy
          SKU_table.Range(SKU_table.ListRows.Count + 2, 1).PasteSpecial xlPasteValues
          .AutoFilter
        End With
    End Sub
    

    最后,您不能在不同的字段上应用“OR”过滤器。要做到这一点,您需要使用一个helper列,如

    中所示。您的问题的更好解决方案可能是使用advanced filter-您可以将此方法中的结果复制到其他位置。。