Excel VBA事件中Intersect使用ListObject范围报类型不匹配错误是什么原因
问题原因
Intersect 函数要求所有输入参数都必须是 Range 对象类型,你修改后的代码传入的第二个参数是 SafeTbl.Range.Address,该属性返回的是表示单元格地址的字符串,和第一个 Target 参数的 Range 类型不匹配,因此触发类型不匹配报错。
正确实现代码
包含表头行的判断逻辑
如果需要将结构化表的表头行也纳入判断范围,使用以下代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim SafeTbl As ListObject Set SafeTbl = Me.ListObjects("Safe") If Not Intersect(Target, SafeTbl.Range) Is Nothing Then MsgBox "Hi" End If End Sub
仅判断数据区域的逻辑
如果只需要对结构化表内的有效数据行(排除表头)做判断,且需要兼容空表场景,使用以下代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim SafeTbl As ListObject Set SafeTbl = Me.ListObjects("Safe") ' 先判断表是否存在数据行,避免空表时报错 If Not SafeTbl.DataBodyRange Is Nothing Then If Not Intersect(Target, SafeTbl.DataBodyRange) Is Nothing Then MsgBox "Hi" End If End If End Sub
内容的提问来源于stack exchange,提问作者MohamadMF
相关产品推荐
相关产品推荐

