Excel 如何更改此VBA以在删除行时不返回错误?
我试图找到一个VBA代码,可以将行从一个工作表移动到另一个工作表,并找到了这段代码。除了删除整行之外,它工作得非常好。当我删除整行时,会出现此错误 这是我正在使用的VBA代码。我怎样才能改变它,使它不会给我这个错误Excel 如何更改此VBA以在删除行时不返回错误?,excel,vba,Excel,Vba,我试图找到一个VBA代码,可以将行从一个工作表移动到另一个工作表,并找到了这段代码。除了删除整行之外,它工作得非常好。当我删除整行时,会出现此错误 这是我正在使用的VBA代码。我怎样才能改变它,使它不会给我这个错误 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Intersect(Target, Range("A:A,Y:Y")) Is Nothing Then
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Intersect(Target, Range("A:A,Y:Y")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Dim bottomB As Long
Select Case Target.Column
Case Is = 1
bottomB = Sheets(Target.Value).Range("A:A").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
Range("A" & Target.Row).Resize(, 25).Copy Sheets(Target.Value).Cells(bottomB, 1)
Target.EntireRow.Delete
End Select
Application.EnableEvents = True
End Sub如果同时更改多个单元格,它将抛出此错误,因此当
更改事件
代码触发时,您可以检查多个单元格是否已更改,然后退出代码
请尝试此代码,看看这是否解决了您遇到的问题
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
If Intersect(Target, Range("A:A,Y:Y")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Dim bottomB As Long
Select Case Target.Column
Case Is = 1
bottomB = Sheets(Target.Value).Range("A:A").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
Range("A" & Target.Row).Resize(, 25).Copy Sheets(Target.Value).Cells(bottomB, 1)
Target.EntireRow.Delete
End Select
Application.EnableEvents = True
End Sub
Sheets(Target.Value)
指活动工作簿中的工作表,其名称包含为Target
的值。这就是你想要的吗?如果目标是多单元格范围,则此操作可能会以多种方式失败,Sheets(Target.Value)
将导致类型不匹配错误。尝试Sheets(Target(1).Value)
指向目标范围内的一个(第一个)单元格