VBA代码是实现筛选从当前时间起7天之内数据,但是运行后筛选不出来,不知道问题在哪里出错了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA代码是实现筛选从当前时间起7天之内数据,但是运行后筛选不出来,不知道问题在哪里出错了相关的知识,希望对你有一定的参考价值。
代码如下
Sub 未联系()
Dim ndate As Date
Dim hdate As Date
Dim i As Integer
Dim j As Integer
i = DateDiff("D", hdate, ndate)
j = 7
If i <= j Then
Range("A1:C16").AutoFilter Field:=1, Criteria1:=">=hdate", Operator:=xlAnd, Criteria2:="<=ndate"
End If
End Sub
其中“ndate”是当前时间,”hdate"是距当前日期7天的日期,感觉问题出现在第9行,但不知道怎么修改,求高手帮忙修改。
如图如果说是今天27日筛选,想筛选7天之前的日期,怎么实现?
不行啊,还是一样的结果!
追答我就你贴出来的代码问个问题:
hdate和ndate好像没有语句可以给它们赋值?简单来说,这2个变量根本就是空值。
如果说想实现我说的功能,该怎么改写,刚刚初学的还没入门呢,能否帮忙修改,发一个完整的代码给我,谢谢!
追答Sub 未联系()
Dim ndate As Date
Dim hdate As Date
Dim i As Integer
Dim j As Integer
ndate = Int(Now())
hdate = Int(Now() - 7)
'j = 7
'i = DateDiff("D", hdate, ndate)
'If i =" & hdate, Operator:=xlAnd, Criteria2:="<=" & ndate
'End If
End Sub
VBA 根据日期筛选数据
筛选两个日期间的全部数据
Dim a, b, c
a = Format(Date, "yyyy/m") '当前年月日
MsgBox a '显示日期时间
'当前月份加4
b = DateAdd("m", 4, a)
Debug.Print b
Dim Rng As Range, arr As Variant
Dim EndRow As Long, EndCol As Long
Dim Rngtime As Range
With Sheets("PM")
'获取A列最后一行(非空行)的行号
EndRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
'获取第一行最后一列(非空列)的列号
EndCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
'保存数据
Set Rng = .Range(.Cells(1, 1), .Cells(EndRow, EndCol))
'存入数组
arr = Rng.Value
'end time
' Set Rngtime = .Range(.Cells(1, 3), .Cells(EndRow, 3))
End With
' 循环筛选符合条件的数据
'
' 重新声明数组,用于保存筛选出来的数据
ReDim Brr(1 To EndCol, 1 To 1)
' 初始化筛选结果的数量
n = 0
For i = LBound(arr) + 1 To UBound(arr)
If DateDiff("m", a, CDate(arr(i, 3))) >= 0 And DateDiff("m", CDate(arr(i, 3)), b) > 0 Then
'时间在 Arr=Rng.Value的时候已经自动转为TimeValue
n = n + 1
ReDim Preserve Brr(1 To EndCol, 1 To n)
For j = 1 To EndCol
Brr(j, n) = arr(i, j)
Next j
End If
Next i
以上是关于VBA代码是实现筛选从当前时间起7天之内数据,但是运行后筛选不出来,不知道问题在哪里出错了的主要内容,如果未能解决你的问题,请参考以下文章