excel - 范围数组的类型不匹配错误;转置相交逻辑
问题描述
如何解决类型不匹配错误(指示)?
如果我想将 sub限制在指定范围内,为什么要更改
If Not Intersect
为If Intersect
退出 sub?Private Sub Workbook_SheetBeforeDoubleClick(ByVal sH As Object, ByVal Target As Range, Cancel As Boolean) ' Exclude specified ranges Dim rExcl(1) As Range, i As Integer, r As Range Set rExcl(0) = Range("Table1"): Set rExcl(1) = Range("Table2") For i = 0 To 1 For Each r In rExcl(i) If r.Parent Is sH Then If Not Intersect(Target, r) Is Nothing Then Exit Sub ' Type mismatch error End If Next Next End Sub
解决方案
您的代码以您呈现的方式运行没有任何问题,它也将以您尝试理解的方式运行,但分别具有不同的含义:
你应该明白它Intersect
返回一个“范围”,上面的代码检查它是否Range
存在。换句话说,这部分应该理解为“如果两个范围相交”。
这部分If Intersect(Target, r) Is Nothing Then Exit Sub
的意思是“如果两个范围不相交”(这样的最终相交不存在)。
如果您指的是真实表,则在提到的两个变体中都不应存在任何“类型不匹配”。如果您将不同的对象(不是范围)命名为“TableX” ,它可能会出现...
请尝试插入下一行代码:
Debug.Print TypeOf rExcl(0) Is Range, TypeOf rExcl(1) Is Range: stop
后:
Set rExcl(0) = Range("Table1"): Set rExcl(1) = Range("Table2")
它在即时窗口中返回什么?
编辑:
您无法“重现 Debug.Print 中的错误”,因为甚至没有到达该行...
您的工作簿中存在冲突。如果双击的单元格是您声称为“奇怪”的单元格,则有您在问题中向我们展示的 Workbook 事件和另一个Worksheet_BeforeDoubleClick
尝试关闭 Excel 应用程序的事件...
首先触发工作表事件,并且不再触发工作簿事件,因为代码尝试退出 Excel 应用程序。尝试将Exit Sub
作为 Worksheet 事件中的第一行代码,然后再次尝试双击。
以后不会有什么不好的了...