首先,这是您尝试从工作表(而不是模块)运行 OnTime 时遇到的错误的快照,正如我将解释的那样。我也遇到了这个错误并试图找出原因。

它看起来像一个安全错误,但在这种情况下,它并不完全是一个正常的安全错误。
要在计时器上运行代码,您必须将其添加到VBA 模块。转到 VisualBasic 编辑器并右键单击 VBAProject(书)。在 Excel 中,它如下所示:
添加模块后,您可以在其中添加计时器代码。
由于您想每 5 秒调用一次 RefreshAction,您可以执行以下操作:
Sub StartProcess()
Debug.Print Now()
Application.OnTime Now() + TimeValue("00:00:05"), "RefreshAction", Schedule = True
End Sub
Sub RefreshAction()
Application.EnableEvents = True
Debug.Print Now() + TimeValue("00:00:05")
Application.OnTime Now() + TimeValue("00:00:05"), "RefreshAction", Schedule = True
End Sub
我将让您在 RefreshAction 子例程中添加您希望它每次执行的代码。
这是它在模块中的样子。确保你的显示它在一个模块中,就像它在图像中一样:

另外,我发现它很片状。如果你在 OnTime 调用中有任何轻微的错误,它都会默默地失败。复制我的代码(我测试过)并先尝试。运行后,只需将您的代码添加到 RefreshAction 子程序。
开始进程()
运行 StartProcess 以开始工作。
另外奇怪的事情
添加该模块后,我的代码仍在工作表中,然后我返回并尝试运行它以再次查看错误,奇怪的是,一旦代码在模块中,您将不会从工作表了。它现在可能正在引用模块中的代码。