我有一张表"数据"。有了这张纸,我正在查看K列。如果它是红色的,那么我将提取完整的行并将它们复制到另一张纸上。延迟&#34 ;.
我遵循以下代码。代码没有任何错误,但它只复制4行红色,而我有12行。
有人能帮助我找到我错在哪里以及我需要哪些改变?
Sub delay()
Dim cell As Range
Dim nextrow As Long
Dim a As Double
Application.ScreenUpdating = False
a = Application.WorksheetFunction.CountA(Sheets("Data").Range("K:K"))
For Each cell In Sheets("Data").Range("K5:K" & a)
If cell.DisplayFormat.Interior.Color = vbRed Then
nextrow = Application.WorksheetFunction.CountA(Sheets("Delayed").Range("K:K"))
Rows(cell.Row).Copy Destination:=Sheets("Delayed").Range("A" & nextrow + 1)
End If
Next
Application.ScreenUpdating = False
End Sub
答案 0 :(得分:2)
首先:
WorksheetFunction.CountA
计算非空单元格的数量和参数列表中的值,不能用它来计算总行数或查找最后一行的数量(除非所有单元格都不是空)。
您可能需要的是:
nmbRows = Workbook("WorkbookName").Worksheet("SheetName").Range("K" & Rows.Count).End(xlUp).Row
或者不那么直率的东西
使用CountA会导致搜索范围缩小,从而导致数据丢失,或者在您的情况下,在不正确的位置插入一行。
实施例 Option Explicit
Sub test()
Dim a As Long
a = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("Ëèñò1").Range("A:A"))
ThisWorkbook.Sheets("Ëèñò1").Range("B1").Value = a
End Sub
是
的第二强>
请务必谨慎,添加对每个range
的引用,sheet
为
ThisWorkbook.Sheets("Data").Range("K5:K" & nmbRows)
通过这样做,您可以始终确定您正在参考您想要检查的正确范围。
另一个注意事项:
我不是VBA专家,但如果我是你,我会在宏的开头分别计算每张表的行数,在循环中我会使用nextrow=nextrow + 1
构造而不是每次调用函数。