Range 的删除方法失败

Delete method of Range failed

我在 excel vba 中有一个 'database',但是当我尝试从我的源中删除一行时,它是按 ID 号选择的,然后按删除键,它卡住了在 Rows(Y).Delete Shift:=xlUp,我不确定为什么,它以前确实有效,但不知何故我弄坏了什么?

列表框中显示所有数据。错误信息是Run-Time error '1004': Delete method of Range failed


Dim X As Long
Dim Y As Long

X = Sheet1.Range("A" & Rows.Count).End(xlUp).Row

For Y = 2 To X

If Sheet1.Cells(Y, 1).Value = Searchtxt.Text Then

Rows(Y).Delete Shift:=xlUp

End If
Next Y

Unload Me
MyUserForm.show

End Sub

我也把这个link留给google驱动器:

https://drive.google.com/file/d/1_VBhBYqNal_U5YphICTH9UQsulEajOrM/view?usp=sharing

  1. Rows() 假定您想要 ActiveSheet。如果您不指定 Sheet,您将 运行 遇到问题,因为 ActiveSheet 可能与您的数据库所在的不同。始终具体,使用:

    Sheet1.Rows(Y).Delete Shift:=xlUp

  2. 如果您允许选择多行,当您开始删除行时,您的数据会向上移动,并且您最终会在删除行时跳过下一行。修复它的简单方法是向后计数,这样您删除的数据就不会受到影响。

    For Y = X To 2 Step -1

甚至更好,为了速度,把它集中到一个范围内,最后一次全部删除。用这个方法加数减数都没有关系

Dim DeleteRows as Range
For Y = 2 To X
    If Sheet1.Cells(Y, 1).Value = Searchtxt.Text Then 
        Set DeleteRows = MakeUnion(DeleteRows,Sheet1.Rows(Y))
    End IF
Next Y
If Not DeleteRows is Nothing Then DeleteRows.Delete Shift:=xlUp

我使用以下函数来保持代码整洁。

Public Function MakeUnion(Arg1 As Range, Arg2 As Range) As Range
    If Arg1 Is Nothing Then
        Set MakeUnion = Arg2
    ElseIf Arg2 Is Nothing Then
        Set MakeUnion = Arg1
    Else
        Set MakeUnion = Union(Arg1, Arg2)
    End If
End Function