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