You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Worksheet_SelectionChange多选单元格触发Type Mismatch错误求助

错误根因
  • 当选中多个单元格触发Worksheet_SelectionChange事件时,参数Target代表的是多单元格组成的区域对象,此时直接读取Target.Value会返回一个二维数组,将数组与字符串"T"做等值比较必然触发类型不匹配错误。
  • 多单元格场景下直接读取Target.Row仅会返回区域首行的行号,会导致后续定位AJ列单元格的逻辑出错。
  • 原代码未做事件防递归处理,后续执行Range("AJ" & ThisRow).Select时会再次触发SelectionChange事件,轻则重复执行宏,重则触发栈溢出报错。
修复后代码

以下代码兼容选中多单元格的场景,同时添加了事件防递归、无关区域过滤逻辑:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim processRange As Range, cell As Range
    ' 仅处理选中区域与第36列的交集,跳过无关列
    Set processRange = Intersect(Target, Me.Columns(36))
    If Not processRange Is Nothing Then
        ' 临时关闭事件,防止后续选中单元格操作递归触发本事件
        Application.EnableEvents = False
        For Each cell In processRange
            ' 逐个判断单元格值,避免多单元格Value为数组的类型错误
            If VBA.Trim(cell.Value) = "T" Then
                ' 选中对应行AJ列单元格
                Me.Range("AJ" & cell.Row).Select
                ' 调用邮件宏
                Call mail_outlook
                ' 若仅需处理第一个匹配值即可终止,保留Exit For;需处理所有匹配值则删除该行
                Exit For
            End If
        Next
        ' 恢复事件开关
        Application.EnableEvents = True
    End If
End Sub

提示:如果你的实际需求是「第36列单元格被修改为"T"时触发逻辑」,而非选中单元格时触发,建议将事件替换为Worksheet_Change,上述代码逻辑可直接复用,能避免误点已存"T"的单元格就重复调用发件宏的问题。

内容的提问来源于stack exchange,提问作者WWL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:39:51