我有一个宏,如下:
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
当我运行以下宏,然后选择多个行然后删除它时,它会引发下面的错误。它仅发生在多行。我还尝试添加一个条件,说明目标。计数> 1,然后退出子,这似乎也没有解决。
Microsoft Visual Basic
Run-time error '13':
Type mismatch
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
尽管我确定您想用椭圆形做某事...但是我会把它留给您。
将您的代码从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