首页 > 解决方案 > Worksheet_SelectionChange 如果条件为假,则返回错误

问题描述

如果选择在第 4 列中并且只选择了 1 个单元格并且第 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

标签: excelvbaif-statementselectionchanged

解决方案


选择改变灾难

两到三个问题

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

推荐阅读