使用VBA在Excel中删除多行时,运行时错误13

我有一个macros如下:

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 

当我运行下面的macros,当我select多行,然后删除它,它会抛出下面的错误。 它只发生多行。 我也尝试添加一个条件,说如果Target.Count> 1然后退出子,这似乎并没有解决它。

 Microsoft Visual Basic Run-time error '13': Type mismatch 

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

 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 

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

将您的代码从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