macros失败,“macros可能无法在此…”

你好,并提前感谢您的帮助。

我有一些我承认从网站上借用的代码。 它会更改每X秒显示的表单。 在我的情况下3秒。 当我运行的时候,它会变成下一张纸,然后在3秒后出错。

我收到的错误是“无法运行macros”C:\ users \ BenjaminSmith \ Desktop \ Book1.xlsm'!displaysheets'。 macros可能不在此工作簿中或所有macros可能被禁用。

这是我的macros代码

Sub displaysheets() ShtNum = ActiveSheet.Index ShtNum = ShtNum + 1 If ShtNum > Sheets.Count Then ShtNum = 1 End If Sheets(ShtNum).Activate Application.OnTime Now + TimeValue("00:00:03"), "displaysheets" End Sub 

如果我删除线

 Application.OnTime Now + TimeValue("00:00:03"), "displaysheets" 

我可以反复运行macros,没有问题。 除了事实上它不会自行继续…

电子表格是一个XLSM。 MS VBA是7.0。 Excel是2010年。

我想也许这个问题是因为代码是recursion的?

感谢您的build议。

进一步从评论…

代码不起作用,因为您没有将代码粘贴到模块中。 新程序员中这是一个非常普遍的错误。 在这种情况下,Excelsearch模块时无法find代码。

@Siddharth Rout我有“ThisWorkbook”中的代码,我插入了一个模块“模块1”,并将代码移到那里,一切按预期工作。 这两个地方有什么不同?

我build议通过Chip Pearson的链接在这里

如果链接已经腐烂,则从链接中提取。

标准代码模块,也叫做简单代码模块或者只是模块,就是你放置大部分VBA代码的地方。 您的基本macros和您的自定义function(用户定义的function)应在这些模块中。 对于新手程序员来说,你所有的代码都是标准模块。 除了基本的过程外,代码模块还应包含对外部函数(Windows API或其他DLL)的任何Declare语句,以及使用Type语句定义的自定义数据结构。

您的工作簿的VBA项目可以包含尽可能多的标准代码模块。 这样可以很容易地将您的程序拆分成不同的模块,以便组织和便于维护。 例如,可以将所有数据库过程放在名为DataBase的模块中,将所有math过程放在另一个名为Math的模块中。 只要一个过程没有用Private关键字声明,或者这个模块没有被标记为私有的,你可以从任何其他模块调用任何模块中的任何过程而不做任何特殊的事情。

工作簿和工作表模块是直接与工作簿对象和每个工作表对象绑定的特殊模块。 工作簿的模块被称为ThisWorkbook,每个工作表模块具有与它所属工作表相同的名称。 这些模块应该包含对象的事件过程,就这些了。 如果将事件过程放在标准的代码模块中,Excel将不会find它们,所以它们不会被执行。 如果您将普通程序放在工作簿或工作表模块中,那么您将无法在完全限定参考资料的情况下对其进行调用。

用户表单模块是UserForm对象的一部分,并包含该表单上的控件的事件过程。 例如,用户窗体上的命令button的Click事件存储在该UserForm的代码模块中。 像工作簿和工作表模块,您应该只在该模块中的UserForm控件的事件过程。

类模块用于创build新的对象。 这里不讨论类模块,只是说类模块用于处理应用程序事件过程。

试试:(我使用这个代码)

 With Application .EnableEvents = True 'needed .OnTime EarliestTime:=Now + TimeSerial(0, 0, 3), Procedure:="displaysheets", Schedule:=True End With 

尝试把你的计时器放在一个全局variables中,并在每次运行函数时添加它,同时configurationOnTime是可调度的

 Global tmrTimer1 Sub displaysheets() tmrTimer1 = Now + TimeValue("00:00:03") 'Enable the schedule Application.OnTime tmrTimer1 , "displaysheets", , True End Sub