第一次运行宏时,单元格将刷新
Sub RefreshAction()
Range("b7").Select
Application.Run "RefreshCurrentSelection"
Application.OnTime (Now() + TimeValue("00:00:05")), "thisworkbook.Action"
End Sub
之后我立即收到错误消息
无法运行宏“C\Desktop\XYZ. xlsm '!thisworkbook. Action”。该宏可能在此工作簿中不可用,或者所有宏都被禁用。
我已经完成了“信任中心-〉信任中心设置-〉宏设置-〉启用所有宏”。
同时单击“信任对VBA工程对象模型的访问”框。
3条答案
按热度按时间xwbd5t1u1#
首先,下面是当您试图从工作表(而不是模块)运行OnTime时所得到的错误的快照,我将对此进行解释。我也得到了这个错误,并试图找出原因。
它看起来像是一个安全错误,但在本例中,它并不完全是一个正常的安全错误。
要在计时器上运行代码,必须将其添加到VBA模块中。转到VisualBasic编辑器并右键单击VBAproject(工作簿)。在Excel中,它如下所示:
添加模块后,您可以在其中添加计时器代码。
由于您希望每5秒调用一次RefreshAction,因此应执行如下操作:
我将允许您在RefreshAction子例程中添加您希望它每次执行的代码。
下面是它在模块中的样子。确保你的显示与图片中一样,它在模块中:
另外,我发现它很不可靠。如果你在OnTime调用中有任何哪怕是轻微的错误,它都会默默地失败。复制我的代码(我测试过它)并先尝试一下。一旦它运行,只需将你的代码添加到RefreshAction子程序中。
启动进程()
运行StartProcess以启动该进程。
还有奇怪的事
在我添加了模块之后,我的代码仍然在工作表中,我返回并尝试运行它,再次看到错误,奇怪的是,一旦代码在模块中,你就不会再从工作表中得到错误了。它现在可能引用了模块中的代码。
wribegjk2#
有关更多详细信息,请参见绝对参考:CPearson OnTime
第一个问题,您需要存储将在
OnTime
方法中输入的时间,以便能够停止它。(这里我声明了一个 Public TimeToRun As Date)第二点要连续使用
OnTime
方法,您需要在定时程序结束时重置定时器(此处为RefreshAllStaticData
)。因此,整个代码应该如下所示:
hs1rzwqc3#
这个错误的另一个相关原因可能是OnTime方法的Procedure参数的字符串长度限制。在vba函数中绕过最大字符串大小?