无法运行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子例程中添加你想要的代码。

这是它在模块中的样子。 确保你的图像和图像一样显示在模块中: 模块在vba中

另外,我发现它很片断。 如果OnTime调用中有什么错误,它将会失败。 复制我的代码(我testing过),然后尝试一下。 一旦运行,只需将您的代码添加到RefreshAction子。

StartProcess()

运行StartProcess启动事情。

另外奇怪的事情

在我添加了Module之后,我仍然在Worksheet中有我的代码,然后我又回到原来的位置,试图运行它来再次查看错误,奇怪的是,一旦代码在Module中,您将不会从工作表了。 这可能是现在引用模块中的代码。