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

选择变更灾难

两三期[=3​​6=]

您应该使用 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