Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建Excel宏以根据工作表中选定的单元格删除行_Excel_Vba - Fatal编程技术网

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

创建Excel宏以根据工作表中选定的单元格删除行,excel,vba,Excel,Vba,我已经创建了一个宏,但是它并没有真正起作用,因为行在删除过程中实际上发生了变化。用户可以选择表格中的任意单元格。运行宏时,只删除属于选定单元格的行。以下是我到目前为止的收获: Sub DeleteSelectedRows() Dim Cell As Range With Sheet1 For Each Cell In Selection .Range(Cell.Address).EntireRow.Delete Next Cell End With End Sub 任何帮助都将

我已经创建了一个宏,但是它并没有真正起作用,因为行在删除过程中实际上发生了变化。用户可以选择表格中的任意单元格。运行宏时,只删除属于选定单元格的行。以下是我到目前为止的收获:

Sub DeleteSelectedRows()
Dim Cell As Range
With Sheet1
For Each Cell In Selection
        .Range(Cell.Address).EntireRow.Delete
Next Cell
End With
End Sub
任何帮助都将不胜感激。

在某些(可能很少)情况下,用户可以按住ctrl键并单击以选择非连续范围。此代码将考虑这种可能性,同时仍然只删除实际选定的行:

Sub DeleteSelectedRows()

    Dim rArea As Range

    For Each rArea In Selection.Areas
        rArea.EntireRow.Delete
    Next rArea

End Sub
在某些(可能很少)情况下,用户可以按住ctrl键并单击以选择非连续范围。此代码将考虑这种可能性,同时仍然只删除实际选定的行:

Sub DeleteSelectedRows()

    Dim rArea As Range

    For Each rArea In Selection.Areas
        rArea.EntireRow.Delete
    Next rArea

End Sub

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

确保将循环设置为
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

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

确保将循环设置为
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

您只需要
Selection.EntireRow.Delete
无需循环。您只需要
Selection.EntireRow.Delete
无需循环。感谢您,这比Selection.area在用户高度多行时工作得更好。非常感谢当用户高度多行时,这比Selection.area工作得更好。非常感谢