您好,提前感谢您的帮助。
我有一些代码,我承认是从一个网站借来的。它每X秒更改一次显示的工作表。在我的例子中是3秒。当我运行它时,它会切换到下一个工作表一次,然后在3秒后出错。
我收到的错误是“无法运行宏"C:\users\BenjaminSmith\Desktop\Book1.xlsm'!displaysheets'.宏可能在此工作簿中不可用,或者所有宏都可能被禁用。“
下面是我的宏的代码
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"
我可以一遍又一遍地运行宏,没有任何问题。除了它不会继续它自己的事实。
电子表格是XLSM。MS VBA为7.0。Excel是2010年。
我在想,问题可能是因为代码是递归的?
谢谢你的建议。
发布于 2014-04-02 16:02:48
从评论中进一步看...
代码不起作用,因为您没有将代码粘贴到模块中。这在新程序员中是一个非常常见的错误。在这种情况下,Excel在搜索模块时无法找到代码。
@Siddharth Rout我将代码放在'ThisWorkbook‘中,我插入了一个模块'Module1’,并将代码移到那里,一切都按预期运行。这两个地方有什么不同?
我推荐使用奇普·皮尔逊的链接HERE
如果链接已腐烂,则从链接中提取。
标准代码模块,也称为代码模块或简称模块,是您放置大多数VBA代码的地方。您的基本宏和自定义函数(用户定义函数)应该包含在这些模块中。对于新手程序员来说,所有的代码都将放在标准模块中。除了基本过程之外,代码模块还应该包含对外部函数(Windows API或其他DLL)的任何Declare语句,以及使用Type语句定义的自定义数据结构。工作簿的VBA项目可以包含任意多个标准代码模块。这使得将您的过程拆分到不同的模块中以便于组织和维护变得容易。例如,您可以将所有数据库过程放在一个名为DataBase的模块中,将所有数学过程放在另一个名为Math的模块中。只要过程没有使用Private关键字声明,或者模块没有标记为private,您就可以从任何其他模块调用任何模块中的任何过程,而无需执行任何特殊操作。工作簿和工作表模块是直接绑定到工作簿对象和每个工作表对象的特殊模块。工作簿的模块称为ThisWorkbook,每个工作表模块与它所属的工作表具有相同的名称。这些模块应该包含对象的事件过程,仅此而已。如果将事件过程放在标准代码模块中,Excel将找不到它们,因此它们不会被执行。如果您将普通过程放在工作簿或工作表模块中,则在没有完全限定引用的情况下将无法调用它们。用户窗体模块是UserForm对象的一部分,包含该窗体上控件的事件过程。例如,UserForm上的命令按钮的Click事件存储在该UserForm的代码模块中。与工作簿和工作表模块一样,您应该只将UserForm控件的事件过程放入此模块中。类模块用于创建新对象。这里不讨论类模块,只是说类模块用于处理应用程序事件过程。
发布于 2014-04-02 10:57:52
Try:(我使用下面的代码)
With Application
.EnableEvents = True 'needed
.OnTime EarliestTime:=Now + TimeSerial(0, 0, 3), Procedure:="displaysheets", Schedule:=True
End With
发布于 2014-04-01 22:26:34
尝试将计时器放在一个全局变量中,并在每次运行函数时添加它,同时将OnTime配置为可调度
Global tmrTimer1
Sub displaysheets()
tmrTimer1 = Now + TimeValue("00:00:03")
'Enable the schedule
Application.OnTime tmrTimer1 , "displaysheets", , True
End Sub
https://stackoverflow.com/questions/22797779
复制相似问题