gpt4 book ai didi

excel - 当 Target 在验证列表中时,Application.Intersect 失败

转载 作者:行者123 更新时间:2023-12-04 19:50:23 25 4
gpt4 key购买 nike

我有下面的函数,我在我的几个项目的整个事件过程中广泛使用它。每隔一段时间,它就会在指示的行上出现下标错误而失败。

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
据我记得,当从一个事件过程调用该函数时,所有故障都发生了,该事件过程响应了具有数据验证的单元格中的更改,这意味着(在上述过程的上下文中)具有单个单元格的简单范围和因此,一个单一的区域,没有什么比函数能够处理的更奇特的了。在每种情况下,测试都表明两个范围都可用(检查地址和值),并且从所有外观来看,该功能都应该有效。在每种情况下,当重复该 Action 时,它确实有效。很难测试得出结论,因为我不能随意产生错误。
我现在认为这是由不精确的鼠标操作引起的,不知何故,单击并没有准确地出现在下拉列表中的一个项目上,或者可能在做出选择之后但在它显示在单元格中之前滑到相邻的单元格.该理论需要变更事件发生在验证完成之前,即在变更被“批准”之前。然后,该理论将得出结论,如果 Application.Intersect 未绑定(bind)到不必要的复杂函数中,它也会失败。因此我的问题是:-
  • 有没有人有与数据验证下拉列表相关的 Application.Intersect 失火的经验?
  • 谁能告诉我这里的事件顺序 - 在验证和更改之间 - 以便在错误发生之前纠正错误。有没有办法检查点击是否准确?
  • 有人会鼓励(或阻止)我在错误发生后 try catch 错误,例如再次将相同的范围重新提交给相同的函数。

  • 在最后一种情况下要回答的问题是是在函数中还是在事件过程中执行此操作。由于这两个范围在函数中都可用,我很想捕获错误并再次运行相同的数据。但由于我不知道导致错误的原因,我可能会创建一个无限循环。也许 DoEvents 的冷却期会有所帮助?
    更好地了解操作和事件的顺序可能会引导我找到一种方法来修复导致故障的损坏数据。这在事件过程中可能更容易做到。例如,如果其中一个范围缺少有关其父级的信息,这些信息在函数中不可用,但在事件过程中很容易提供 - 如果我知道范围对象可能以哪种方式损坏。
    有任何想法吗?欢迎所有建议。
    根据@FaneDuru 的建议,我将函数修改如下。
    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,打印到立即窗口,都符合预期。我发现的唯一不规则之处是 Target 显示为空白(忘记检查它是否包含错误)。尽我所能尝试,我无法在同一个文件中复制错误具有相同或不同数据的位置。我的测试包括在触发单元格中输入“”并且没有冒犯。我仍然认为触发单元格具有数据验证很重要(该列表是从同一工作簿中的不同工作表中提取的苍蝇,因此可能会稍微延迟到达 - 我不会注意到)。
    当时唯一运行的其他应用程序是 MS Edge(和 VBE)。修改了程序指定 Set Sect = Excel.Application.Intersect(Target, Area)并将继续使用该功能,直到它可能再次崩溃。

    最佳答案

    通过购买新鼠标解决了该问题。事实证明,我观察到的闪烁不是由不精确的点击引起的,而是由对点击的不精确解释引起的。新鼠标上任后,整个问题都消失了。那发生在 3 个多月前,从那时起,相同的代码一直在完美运行。

    关于excel - 当 Target 在验证列表中时,Application.Intersect 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63977259/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com