[英]Deleting every second row in excel via VBA
我想编写一个代码,检查一张表中有多少行,然后删除每隔一行。 程序应该是这样的:
这是我的代码停止在第8行activeRow = activeRow - 2
。
Sub trendlucid()
Dim numOfRows As Integer
Dim activeRow As Integer
numOfRows = Sheets(actualsheet).UsedRange.Rows.Count
activeRow = numOfRows
Do While activeRow > 1
Rows(activeRow).EntireRow.Delete
activeRow = activeRow - 2
Loop
End Sub
我不知道它为什么会停止。 有人可以帮我吗?
谢谢你,祝你有美好的一天
删除行时,循环返回:
Sub TestMe()
Dim numOfRows As Long
Dim activeRow As Long
numOfRows = ActiveSheet.UsedRange.Rows.Count
activeRow = numOfRows
Dim i As Long
For i = numOfRows To 1 Step -2
ActiveSheet.Rows(i).EntireRow.Delete
Next i
End Sub
删除行的方法有点快,如果先将它们保存在一个范围内,最后删除范围。 因此,您只使用一次删除操作:
您的代码中存在两个缺陷
不确定的表格参考
当你删除ActiveSheet
行时,你正在计算Sheets(actualsheet)
的UsedRange
行数Sheets(actualsheet)
隐式引用的表ows(activeRow).EntireRow.Delete
)
所以一定要引用同一张表(例如: ActiveSheet
)
不确定的范围参考
UsedRange
可以从与行1不同的行开始,而Rows(index)
考虑从行1开始的行索引
所以引用UsedRange
Rows()
而不是ActiveSheet
(隐式假设) Rows()
所有这些总结为:
Sub trendlucid()
Dim numOfRows As Long ' use Long instead of Integer to avoid overflow issue for more thna some 32k rows or so
Dim activeRow As Integer
With ActiveSheet.UsedRange ' reference "active" sheet 'UsedRange' range
numOfRows = .Rows.Count ' count the number of rows of referenced range
activeRow = numOfRows
Do While activeRow > 1
.Rows(activeRow).EntireRow.Delete ' reference 'UsedRange' 'Rows()' instead of 'ActiveSheet' 'Rows()'
activeRow = activeRow - 2
Loop
End With
End Sub
你必须尝试类似的东西......
您不需要对Rows
使用EntireRow
,只需要Row Index
,并且将对整行执行Delete
操作。
Sub trendlucid()
Dim numOfRows As Long
Dim i As Long
numOfRows = ActiveSheet.UsedRange.Rows.Count
For i = numOfRows To 2 Step -2
Rows(i).Delete
Next i
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.