无法运行macros
我在下面的macros中遇到了一个问题
Sub RefreshAction() Range("b7").Select Application.Run "RefreshCurrentSelection" Application.OnTime (Now() + TimeValue("00:00:05")), "thisworkbook.Action" End Sub
当我第一次运行macros时,单元格刷新,但之后立即得到错误消息
消息:无法运行macros“C \ Desktop \ XYZ.xlsm!thisworkbook.Action”。macros可能不可用在此工作簿或所有macros可能被禁用。
我已经通过“信任中心 – ”信任中心设置 – >macros设置 – >启用所有macros,它不工作。
还可以单击“信任访问VBA项目对象模型”框。
有关更多详细信息,请参阅绝对参考: CPearson OnTime
第一个问题 ,你需要存储在OnTime
方法中input的时间,以便能够停止它。 (这里我宣布一个Public TimeToRun为Date )
第二点要连续使用OnTime
方法,需要在定时过程结束时复位定时器(此处为RefreshAllStaticData
)。
所以你的整个代码应该是这样的:
Public TimeToRun As Date 'so that TimeToRun can be used in both the functions Sub RefreshAction() Range("b7").Select Application.Run "RefreshCurrentSelection" DoEvents 'Store the next date of execution in TimeToRun TimeToRun = Now() + TimeValue("00:00:05") 'Launch the next OnTime Application.OnTime TimeToRun, "RefreshAllStaticData" End Sub Sub RefreshAllStaticData() '--++-- Place your code here, as it is now --++-- '----Call RefreshAction to reset the OnTime method '---------to another 5 seconds and keep "looping" RefreshAction End Sub Sub Kill_OnTime() 'Launch this to stop the OnTime method Application.OnTime _ earliesttime:=TimeToRun, _ procedure:="RefreshAllStaticData", _ schedule:=False End Sub
首先,下面是你试图从工作表(而不是模块)运行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调用中有什么错误,它将会失败。 复制我的代码(我testing过),然后尝试一下。 一旦运行,只需将您的代码添加到RefreshAction子。
StartProcess()
运行StartProcess启动事情。
另外奇怪的事情
在我添加了Module之后,我仍然在Worksheet中有我的代码,然后我又回到原来的位置,试图运行它来再次查看错误,奇怪的是,一旦代码在Module中,您将不会从工作表了。 这可能是现在引用模块中的代码。