我有一个宏如下:
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
答案 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