vba小程序报"自动化(Automation)错误如何处理?

2024-11-15 00:33:08
推荐回答(2个)
回答1:

首先,如果是做为 Worksheet_Change 事件的代码,那么 For ... Next 循环中的第一行代码就会引起无限递归错误。
这句代码是 Cells.Delete ,一但执行,就会再次触发 Worksheet_Change 事件,开始嵌套运行事件过程,然后到了这一行,又将触发 Worksheet_Change 事件,……,无限递归下去。

应当在事件过程的第一句中添加:
Application.EnableEvents = False
禁止VBA响应任何事件,保证后续代码正确运行。
然后在事件过程最后一句添加:
Application.EnableEvents = True
恢复VBA对事件的响应。

回答2:

这两个过程的适用范围不同
Private Sub Worksheet_Change(ByVal Target As Range)
' 定义VBA,并规定了该VBA只能作用于工作表,并随时监控工作表的变化
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
而这个是对表的选择为执行条件,也就是点一下工作表
所以在表页上有什么要处理的都是用下面这个过程,对表的控制或有加载项需要处理一般都放在
Private Sub Workbook_Open()
End Sub
如果想不影响日常使用excel,又想间隔一段时间看一下最新数据,就放模块里面去,他可以让你在指定时间更新,也可以指定隔多少时间更新,非常方便
Private Sub auto_open()
Application.OnTime TimeValue("16:50:00"), "my_Procedure"
End Sub