【发布时间】:2023-03-21 06:00:02
【问题描述】:
我一直在尝试制作一个宏来突出显示整个行的日期,如果它们落入特定的日期间隔。我遇到的问题是:当宏找到某个日期时,它会为该日期的整行着色,然后应该使用 .findnext 进入下一个 .find。但是宏在这里陷入了循环
Do While Not c Is Nothing
c.EntireRow.Interior.Color = vbCyan
Set c = Dates.FindNext
Loop
c 值为 2021.03.01(作为 StartDate) 我的代码如下所示:
Private Sub CommandButton2_Click()
Dim c As Range
Dim first As String
Dim last As String
Dim StartDate As Date
Dim EndDate As Date
Dim DateLooper As Date
first = CLng(Range("E2").Value)
last = CLng(Range("G2").Value)
For Each Cell In ActiveSheet.Range("H2:H" & Cells(Rows.Count, 8).End(xlUp).Row)
Sheet = Cell
StartDate = first
EndDate = last
For DateLooper = StartDate To EndDate
Set Dates = Worksheets(Sheet).Range("P:P")
Set c = Dates.Find(What:=DateLooper)
Do While Not c Is Nothing
c.EntireRow.Interior.Color = vbCyan
Set c = Dates.FindNext(c)
Loop
Next DateLooper
Set c = Nothing
Next Cell
End Sub
这里有什么问题?感谢您的时间和帮助。 也许是因为 c 是一个日期?
【问题讨论】:
-
日期可能很棘手,但如果 c 不是空的话,你的
Do循环将永远不会结束。退出的常用方法是存储第一个找到的单元格的地址,然后循环,直到你回到那个地址,这意味着你回到了你开始的地方。 -
H:H 列是否已排序?
-
H:H 列有多少行?我的意思是一个近似值...
标签: vba loops date find do-while