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
Rows()
假定您想要 ActiveSheet
。如果您不指定 Sheet
,您将 运行 遇到问题,因为 ActiveSheet
可能与您的数据库所在的不同。始终具体,使用:
Sheet1.Rows(Y).Delete Shift:=xlUp
如果您允许选择多行,当您开始删除行时,您的数据会向上移动,并且您最终会在删除行时跳过下一行。修复它的简单方法是向后计数,这样您删除的数据就不会受到影响。
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
我在 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
Rows()
假定您想要ActiveSheet
。如果您不指定Sheet
,您将 运行 遇到问题,因为ActiveSheet
可能与您的数据库所在的不同。始终具体,使用:Sheet1.Rows(Y).Delete Shift:=xlUp
如果您允许选择多行,当您开始删除行时,您的数据会向上移动,并且您最终会在删除行时跳过下一行。修复它的简单方法是向后计数,这样您删除的数据就不会受到影响。
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