Excel 当目标位于验证列表中时,Application.Intersect失败
在我的几个项目中,我在整个活动程序中广泛使用以下功能。每隔一段时间,它就会失败,并在指示行上出现下标错误Excel 当目标位于验证列表中时,Application.Intersect失败,excel,vba,Excel,Vba,在我的几个项目中,我在整个活动程序中广泛使用以下功能。每隔一段时间,它就会失败,并在指示行上出现下标错误 Function Insect(Target As Range, ParamArray Rng() As Variant) As Boolean Dim Fun As Variant ' range intersection / return boolean Dim Area As Range ' Range.Area
Function Insect(Target As Range, ParamArray Rng() As Variant) As Boolean
Dim Fun As Variant ' range intersection / return boolean
Dim Area As Range ' Range.Area
Dim i As Integer ' index
For i = 0 To UBound(Rng)
For Each Area In Rng(i).Areas
Set Fun = Application.Intersect(Target, Area) ' failure occurs here
Fun = Not Fun Is Nothing
If Fun Then Exit For
Next Area
If Fun Then Exit For
Next i
Insect = Fun
End Function
据我回忆,当函数从一个事件过程调用时,所有的失败都发生了,该过程通过数据验证响应单元格中的更改,这意味着(在上述过程的上下文中)只有一个单元格的简单范围,因此只有一个区域,没有什么比函数能够处理的更奇怪的了。在每种情况下,测试都表明这两个范围都可用(检查地址和值),对于所有外观,该功能都应该工作。在每种情况下,当动作重复时,它都起作用。很难得出结论,因为我不能随意产生错误
我现在认为这是由于鼠标操作不精确造成的,不知何故,鼠标的点击并没有准确地出现在下拉列表中的一个项目上,或者可能在做出选择后但在单元格中显示之前滑向相邻的单元格。这一理论将意味着变更事件发生在验证完成之前,也就是说变更“批准”之前。然后,该理论会得出结论,如果不将Application.Intersect绑定到一个不必要的复杂函数中,它也会失败。因此,我的问题是:-
Dim Fun As Boolean ' return boolean
Dim Sect As Range ' intersection range
Dim Area As Range ' Range.Area
Dim i As Integer ' index
For i = 0 To UBound(Rng)
For Each Area In Rng(i).Areas
Set Sect = Application.Intersect(Target, Area)
Fun = Not Sect Is Nothing
If Fun Then Exit For
Next Area
If Fun Then Exit For
Next i
Insect = Fun
不幸的是,这似乎没有什么不同。下一次崩溃再次发生在同一行(Set Sect=Application.Intersect(Target,Area)
),但我认为错误消息是另一条,“对象不支持此属性或方法”。Target.Address,Rng(I).Address和Area.Address(打印到即时窗口)都与预期的一样。我发现的唯一不规则之处是目标显示为空(忘记检查是否包含错误)。尽管我可能尝试,但我无法使用相同或不同的数据在同一位置复制错误。我的测试包括输入“”我仍然认为触发单元格具有数据验证的重要性(列表是从同一工作簿中的不同工作表中动态提取的,因此可能会稍微延迟到达-我不知道)
当时运行的唯一其他应用程序是MS Edge(和VBE)。已修改程序以指定
Set Sect=Excel.application.Intersect(目标,区域)
并将继续使用该功能,直到它可能再次崩溃。购买新鼠标解决了该问题。结果表明,我观察到的闪烁不是由不精确的单击引起的,而是由不精确的单击解释引起的。当新鼠标开始工作时,整个问题消失了。这发生在3个月前,同一代码一直在完美地工作。请尝试声明Dim Fun As Range
Intersect
返回一个范围。布尔值
仅通过范围分析得出是否为无
的结果。理论上,As Varian
我的范围也包括一个范围,但有时VBA可能是b如果不准确地声明为变量,则e会感到困惑…抛出的错误是什么?验证通常会同时失败吗?@JMP感谢您的时间。这是一个下标错误。我已修改了我的问题,以包含这些信息。不,验证没有失败。我只是觉得在我创建se的方式中有一个摇摆回忆。@FaneDuru谢谢你的时间。不,乐趣不应该是一个范围。`Fun=不乐趣什么都不是。`Fun=不乐趣什么都不是`。错误发生在那之前的一行。哈哈-我忘了我是如何编写自己的函数的。很抱歉理解得太慢,但现在我想你说对了。我将拆分Fun
的两个函数,并使用两个变量:范围和布尔。因为不是每次使用都会出错,我会测试一周,然后回来。谢谢你的耐心。