使用VBA删除Excel中的多行时出现运行时错误13

时间:2016-12-29 17:14:37

标签: excel excel-vba macros vba

我有一个宏如下:

Dim oval

Public Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Value = Null Then Exit Sub

Application.EnableEvents = False
oval = Target.Value
MsgBox Target.Count

Application.EnableEvents = True
End Sub

当我运行以下宏并且当我选择多行然后删除它时,它会抛出下面的错误。它只发生在多行中。我还试图添加一个条件,如果Target.Count> 1然后退出Sub,这似乎也没有解决它。

Microsoft Visual Basic

Run-time error '13':

Type mismatch

2 个答案:

答案 0 :(得分:2)

当您选择多个单元格时,Target.Value是一个数组,因此您无法检查它的“值”要检查第一个项目的值,您可以执行类似的操作(用于测试):

Debug.Print Target.Value()(1,1)

您可以使用IsArray进行检查,如果您想结束它,那么

If IsArray(Target.Value) Then Exit Sub

看起来你想要数,但也许是这样的:

Dim oval

Public Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then
    MsgBox Target.Count
Else
    If Target.Value = vbNullString Then Exit Sub
    oval = Target.Value
    MsgBox Target.Count
End If
End Sub

虽然我确定你想用椭圆做点什么......但我会把它留给你。

答案 1 :(得分:1)

将您的代码从Worksheet_SelectionChange事件更改为Worksheet_Change事件。

此外,只有删除多个单元格后才会有多个单元格,因此不需要第二个If Target.Value = "" Then Exit Sub。除非你不希望oval有一个"空的"值。

<强>代码

Dim oval

Public Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

' this line might be redundant
'If Target.Value = "" Then Exit Sub

Application.EnableEvents = False    
oval = Target.Value    

Application.EnableEvents = True

End Sub