使用VBA删除某些行时遇到麻烦。
我在A到K列的行中组织了数据。在K列中有一个计数器。当它超过1时,需要删除整行。我设置以下代码;并期望它对超过1的任何内容在K列上进行过滤。如果发现多于1行(行1是标题),它将删除可见的任何内容,否则只会从过滤器中删除条件。
但是,第一个消息框返回的值为2900(正确),然后第二个消息框返回的值为1,我不知道为什么。因此,K列超过1(大约2,000)的行都不会被删除。
可见行在宏的开头定义为Long。
With MySheet
'Find new lastrow
lRowDbMsNew = .Cells.Find(What:="*", _
After:=Range("A1"), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).ROW
.Range("A:K").Calculate
MsgBox ("The last row in the data is " & lRowDbMsNew)
.Range("A1:A" & lRowDbMsNew).AutoFilter Field:=11, Criteria1:=">1"
VisibleRows = .Range("A1:A" & lRowDbMsNew).SpecialCells(xlCellTypeVisible).Rows.Count
MsgBox ("Number of visible rows: " & VisibleRows)
If VisibleRows > 1 Then
.Range("A2:A" & lRowDbMsNew).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.Range("A1:K" & lRowDbMsNew).AutoFilter Field:=11
Else
.Range("A1:K" & lRowDbMsNew).AutoFilter Field:=11
End If
End With
答案 0 :(得分:1)
更改计算可见行数的行
VisibleRows = .Range("A1:A" & lRowDbMsNew).SpecialCells(xlCellTypeVisible).Count
(删除.rows
)。
.SpecialCells
函数返回不连续的Range
(在您的情况下,包含A
列中所有可见的单元格),例如$A$1,$A$4:$A$6...
。
如果您检查该范围的Rows
-propery(本身也是Range
),则会获得相同的地址,但是,使用Count
-Property会返回仅该范围的第一个所谓的Area
中的像元数。
使用此CDE进行检查:
Dim r As Range
Set r = ThisWorkbook.Sheets(1).Range("A1:A" & lRowDbMsNew).SpecialCells(xlCellTypeVisible)
Debug.Print r.Address
Debug.Print r.Count
Dim r2
Set r2 = r.Rows
Debug.Print r2.Address
Debug.Print r2.Count