Worksheet_SelectionChange Returns 如果条件为假则出错
Worksheet_SelectionChange Returns an error if the condition is false
我尝试退回表格
if 选择在第 4 列 and 只有 1 个单元格被选中 and 第 3 列中的下一个单元格是空的
如果条件为真,则有效
但是如果条件为假,就会出现错误:
run time error '13': type mismatch,
在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
选择变更灾难
两三期[=36=]
您应该使用 CountLarge
而不是 Count
。如果你 select 太多单元格,Count
会导致 Run-time error '6': Overflow
。通过 select 工作表 (CTRL+A
) 上的所有单元格进行尝试。
如果您 select 列 A
中的范围,则无法计算 Target.Offset(, -1)
将导致
Run-time error '1004': Application-defined or object-defined error
.
如果多个单元格被 select 编辑,那么 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
我尝试退回表格 if 选择在第 4 列 and 只有 1 个单元格被选中 and 第 3 列中的下一个单元格是空的
如果条件为真,则有效
但是如果条件为假,就会出现错误:
run time error '13': type mismatch,
在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
选择变更灾难
两三期[=36=]
您应该使用 CountLarge
而不是 Count
。如果你 select 太多单元格,Count
会导致 Run-time error '6': Overflow
。通过 select 工作表 (CTRL+A
) 上的所有单元格进行尝试。
如果您 select 列 A
中的范围,则无法计算 Target.Offset(, -1)
将导致
Run-time error '1004': Application-defined or object-defined error
.
如果多个单元格被 select 编辑,那么 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