我有两个Macro,它按日期过滤工作表列,然后删除不相关的列。
然而,这是非常错误的,我需要一些帮助来纠正这一点。
这是第一个宏应该发生的事情:
1)将第2行的第B行格式化为日期格式的最后一行dd-mm-yyyy - 目前这种情况不会发生,并且在某些时候它将格式应用于整个B列,包括数据后的空单元格
2)在B栏(日期)上应用过滤器以显示除当天前一天之外的所有记录 - 这是正确的一半,因为它不包括过滤器中的当前日期。当我运行“删除”宏时,显示的单元格是当前日期和前一天,我应该只看到前一天。
Sub DateFilter()
Dim ws1 As Worksheet
Dim c As Range
Dim LastRow As Long
Dim Current_Date As Date
On Error Resume Next
Set ws1 = ActiveWorkbook.Sheets("Sheet")
LastRow = ws1.Cells(Rows.Count, 1).End(xlUp).Row
With ws1
For Each c In ActiveSheet.Range("B2:B" & LastRow).Cells
Current_Date = CDate(c)
c.Value = Current_Date
Next c
End With
x = CLng(Date)
ws1.UsedRange.AutoFilter Field:=2, Criteria1:="<" & x, Operator:=xlAnd, Criteria2:="<" & x - 1
End Sub
答案 0 :(得分:2)
正如@SJR建议的那样,你在一篇文章中有太多问题所以我只会看第一个宏。要获得第二个宏的分辨率,请开始一个新的线程
下面的代码应该通过一些注释来实现您对第一个宏的要求,以帮助您理解代码
Sub DateFilter()
Dim oWS As Worksheet: Set oWS = ThisWorkbook.Worksheets("Sheet")
' On Error Resume Next VERY very bad idea as this will hide all issues in the code!
With oWS
' Set the range format to specified date format. This will automatically update
' the values in the cells to a date.. no need to copy and paste them
.Range("B2:B" & .Cells(.Rows.count, 2).End(xlUp).Row).NumberFormat = "dd-mm-yyyy"
' Set the autofilter to display all dates other than yesterdays
.Range("B:B").AutoFilter Field:=1, Criteria1:="<" & CLng(DateAdd("d", -1, Date)), Operator:=xlOr, Criteria2:=">" & CLng(DateAdd("d", -1, Date))
End With
End Sub