根据工作表中选定的单元格创buildExcelmacros以删除行

我创build了一个macros,但是由于在删除过程中行实际上发生了变化,所以它并没有真正的工作 用户select表格中的任意单元格。 在运行macros时,只删除属于所选单元的那些行。 这是我到目前为止:

Sub DeleteSelectedRows() Dim Cell As Range With Sheet1 For Each Cell In Selection .Range(Cell.Address).EntireRow.Delete Next Cell End With End Sub 

任何帮助将不胜感激。

修改集合时不要使用For Each循环,使用一个更简单的For循环,从最后一行索引(或列索引)开始,并向后返回到第一个索引。

确保循环设置为Step -1后退。 向后的方向是必需的,因为在Excel中,当您删除行/列时,剩余的行/列将向上/向左移动,因此在第一次编辑之后,所有更多的索引可能都是错误的。

 Dim rng as Range Set rng = Selection Dim firstRow as Integer Dim lastRow as Integer firstRow = rng.Row lastRow = rng.Rows(rng.Rows.Count).Row Dim i as Integer For i = lastRow to firstRow Step -1 Call ActiveSheet.Rows(i).Delete() Next i 

在一些(可能很less见)的情况下,用户可以通过Ctrl +点击来select一个非连续的范围。 这个代码将考虑到这种可能性,同时仍然只删除实际select的行:

 Sub DeleteSelectedRows() Dim rArea As Range For Each rArea In Selection.Areas rArea.EntireRow.Delete Next rArea End Sub