fdt*_*243 2 excel ontime vba popup excel-vba
我在下面的宏中遇到了问题
Sub RefreshAction()
Range("b7").Select
Application.Run "RefreshCurrentSelection"
Application.OnTime (Now() + TimeValue("00:00:05")), "thisworkbook.Action"
End Sub
Run Code Online (Sandbox Code Playgroud)
第一次运行宏时,单元格刷新,但之后立即收到错误消息
消息:无法运行宏“ C \ Desktop \ XYZ.xlsm'!thisworkbook.Action'。该宏可能在此工作簿中不可用,或者所有宏都可能被禁用。
我已经经历过“信任中心->信任中心设置->宏设置->启用所有宏,但是它不起作用。
还单击“对VBA项目对象模型的信任访问”框。
首先,这是当您尝试从工作表(而非模块)运行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
Run Code Online (Sandbox Code Playgroud)
我将让您每次都在RefreshAction子例程中添加您希望它执行的代码。
这是该模块中的外观。确保您显示的内容与图片中的内容一样在模块中:

另外,我发现它非常脆弱。如果您在OnTime呼叫中甚至有任何错误,它将无声地失败。复制我的代码(我对其进行了测试),然后先尝试。一旦运行,只需将代码添加到RefreshAction子项即可。
StartProcess()
运行StartProcess开始事情。
另外的怪事
添加该模块后,我的代码仍保存在工作表中,然后回去尝试运行该代码以再次看到错误,奇怪的是,一旦代码进入模块,您将不会从工作表了。现在可能正在引用模块中的代码。