我试图跳出一个Form如果选择在第4列且只选择了一个单元格并且第3列中的下一个单元格为空
如果条件为真,则工作
但如果条件为假,则会出现错误:
运行时错误"13":类型不匹配,
在if行上
这就是代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 4 And Target.Cells.Count = 1 And Target.Offset(, -1).Value = 0 Then
C = Target.Offset(, -1).Address
UserForm1.Show
End If
End Sub
选择更改灾难
两到三个问题
您应该使用CountLarge
而不是Count
。如果选择的单元格过多,Count
将导致Run-time error '6': Overflow
。请选择工作表上的所有单元格(CTRL+A
(进行尝试。
如果在A
列中选择一个范围,则无法计算Target.Offset(, -1)
将导致Run-time error '1004': Application-defined or object-defined error
。
如果选择了多个单元,则Target.Offset(,-1).Value
将导致无法与0
进行比较的阵列,这将导致Run-time error '13': Type mismatch
。
一个可能的解决方案
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Const ColumnNumber As Long = 4
Const ColumnOffset As Long = -1
Const OffsetValue As Long = 0
Dim C As String
With Target
If .Column + ColumnOffset < 1 Or .Cells.CountLarge > 1 Then Exit Sub
If .Column = ColumnNumber And .Offset(, ColumnOffset) = OffsetValue Then
C = Target.Offset(, ColumnOffset).Address
UserForm1.Show
End If
End With
End Sub