我是VBA的初学者,我需要编写一个列,我必须在当前日期的7天内取消勾选。我一直在使用用户LR42的代码
anonymous user
我确实从我的数据中取消了7天。但是,问题有时候,数据看起来像这样:
200
今天的日期是1月24日。当前日期 - 7天是1月18日。我希望代码在7天内(包括当前日期)取消勾选,同时考虑到这些日期内可能缺少日期的事实。如果我要手动取消勾选它,我会在1月16日之前取消勾选。但是,根据上面的数据,代码只会在1月18日之前取消勾选(同时跳过那里的事实并不是1月份23和21)。
我应该如何对代码进行编码,以致代码还会考虑这7天内可能缺少日期的事实?
答案 0 :(得分:0)
我正在努力针对美国日期格式对此进行测试,但请尝试以下设置。假设您的数据被设置为名为Table1的Excel表,并且它有一个名为Date
的列(在A列中),正在进行排序,并且日期不会重复。
注意: Ctrl + T ,在数据范围的填充单元格中,将数据范围转换为Excel中的表格
Option Explicit
Sub FilterData()
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1")
Dim sourceTable As ListObject
Set sourceTable = ws.ListObjects("Table1")
Dim cutOffDate As Date
cutOffDate = CDate(ws.Range("A" & Split(Split(sourceTable.DataBodyRange.Address, ":")(1), "$")(2)).Offset(-7, 0).Value2)
With sourceTable.Sort
.SortFields.Clear
.SortFields.Add _
Key:=Range("Table1[[#All],[Date]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
sourceTable.Range.AutoFilter Field:=1, Criteria1:="<" & cutOffDate, Operator:=xlAnd
End Sub
示例数据如表:
对于非美国日期格式区域设置:如果您遇到不同日期格式(即非US格式)的问题导致过滤器功能不正确,您可以尝试@Ron Rosenfeld的建议,基本上将变量作为Long传递或双倍以避免内部转换:
e.g。
Dim cutOffDate As Long
cutOffDate = ws.Range("A" & Split(Split(sourceTable.DataBodyRange.Address, ":")(1), "$")(2)).Offset(-7, 0).Value2