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

时间:2017-07-20 08:37:50

标签: vba excel-vba range filtering date-range

我对VBA很新,但学习。 我' m旨在加快一些日常总结。

  1. 我遇到了清除过滤器的问题(如果有些人放在另一个字段上)我没有时会收到错误。

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

  3. 不确定如何选择过滤范围,我想出了一个,但必须有更好的方法。

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

    它是更大宏的一部分,因此声明是在较早的时候制作的,它们在不同的部分工作,所以它们不是问题。

    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
    

    您能否解释一下新行或发送指南的链接。 我宁愿理解而不仅仅是复制粘贴。

1 个答案:

答案 0 :(得分:0)

  

第一个问题

要安全地删除任何以前的过滤器,请不要使用Worksheet.ShowAllData;请改用Worksheet.AutoFilterMode = False。即。

Sheets("Zamówienie").AutoFilterMode = False
  

第二个问题

要过滤日期,假设您的列已经格式化为日期,并且var1Date或数字变量,只需使用变量,不要Format它。此外,您不需要两个Autofilter语句,只需一个。当然,不需要使用Select(你不需要它,它是bug的来源)。

  

第3个问题

要在没有标题的情况下进行复制,请使用.Offset(1).Copy,并且不需要使用SpecialCells(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

最后,您无法申请" ORed"过滤器在不同的领域。为此,您需要使用辅助列,如this answer.

中所示