你可以检测,如果和excel查找和replace是在工作表change_change()?

我刚刚使用亚马逊电子表格崩溃excel来更新提要。

在查找并replace[全部replace为第一次replace后选定的2个单元格]时,将使用整个电子表格完成worksheet_change()函数。 这意味着replace发生在原始区域之外。 不幸的是,重新排名文本包括查找文本,每个replace重新select整个区域excel运行,直到它跑了空间,然后坠毁。

按下control-break打开vba对话框STOP / CONTINUE / DEBUG。 因为亚马逊保护了纸张,所以DEBUG变灰。 STOP会停止一次运行,但会继续崩溃。 CONTINUE将切换回当前更改并继续崩溃。

有没有办法检测执行excel vba时查找和replace操作是否在执行?

问候约翰

不幸的是,在这种情况下无法知道什么是触发Worksheet.Change事件。 所有你可以知道的是,工作表内容发生了一些变化,工作表中的哪些单元格发生了变化。 但是,您无法知道调用哪些代码来进行更改,或者即使它进行更改的代码,因为用户也可能导致Worksheet.Change事件触发。

我看到上面描述的两个问题:

  1. 您声明您已开始select两个单元格的查找replace操作。 但是,您所描述的行为表明您只select了一个单元格。 如果select了两个或更多单元格,则查找replace操作仅在选定范围内发生。 如果您只有一个单元格被选中,但是,查找replace发生在工作表中的所有单元格上。 所以我强烈怀疑在开始查找replace操作时只有一个单元格被选中,而不是两个。

  2. 查找文本和replace文本重叠的事实听起来不是一个好主意,但是它不应该对您所描述的那种非终止recursion产生任何问题。 处理Worksheet.Change事件的worksheet_change()函数是否可能直接或间接地调用另一个find-replace操作? 如果是这样,那么你很可能会得到无限的recursion。

迈克