全屏编码

我有以下代码,全屏加载工作表1分钟,然后移动到工作簿中的下一个工作表,使用完全相同的方法。

这是在一个大屏幕上显示统计,循环浏览几个统计页面。

这在Excel 2007和2010中完美工作。然而,当在Excel 2013上执行相同的代码时,Excel只是最大化了我的CPU的一个核心,并保持不响应。 我甚至不能逃脱来破坏代码执行。 在所有版本上逐行执行代码。

'Loads up Daily Dispatch Figures worksheet Application.ScreenUpdating = False Sheets("Daily Dispatch Figures").Select Range("A1").Select Range("A1:C36").Select ActiveWindow.Zoom = True Range("A1").Select ActiveWindow.DisplayHeadings = False Application.DisplayFormulaBar = False Application.DisplayFullScreen = True Application.ScreenUpdating = True ' Stays on this screen for 1 min TimVal = Now + TimeValue("0:01:00") Do Until Now >= TimVal Loop 

噢,不要这样做:

 ' Stays on this screen for 1 min TimVal = Now + TimeValue("0:01:00") Do Until Now >= TimVal Loop 

尝试这个:

 Application.OnTime Now + TimeValue("0:01:00"), "ProcedureToRun" 

你不想在没有睡眠的无限循环中捕捉你的应用程序。

任何时候如果你没有睡觉就坐在一个无限循环中,它将使用100%的处理器时间无所事事。 Application.OnTime“计划”一个事件并将控制返回给Excel UI线程,而不是无限循环。

您可以在这里阅读更多信息: https : //msdn.microsoft.com/en-us/library/office/ff196165.aspx

我不确定你的循环之后你在做什么,但是你需要确保你的代码在一个单独的子程序中并且调用它。

这是一个子程序去下一张表。

 Sub MoveNext() On Error Resume Next Sheets(ActiveSheet.Index + 1).Activate If Err.Number <> 0 Then Sheets(1).Activate On Error Goto 0 End Sub 

您可以将Application.OnTime添加到它的末尾,让它自己调用:

 Sub MoveNext() On Error Resume Next Sheets(ActiveSheet.Index + 1).Activate If Err.Number <> 0 Then Sheets(1).Activate On Error Goto 0 Application.OnTime Now + TimeValue("00:01:00"), MoveNext End Sub 

这样,它将循环并永久地从一张纸到另一张纸(或者直到你停止它,而不pipe你select使用什么方法)。

最后,您可以通过存储预定的时间并使用Scheduled:=False来取消此操作。

你的最终代码可能看起来像这样:

 Public scheduledTime as Date Sub StartDisplaying() 'Your start code: '--------------------------------------------- Application.ScreenUpdating = False Sheets("Daily Dispatch Figures").Select Range("A1").Select Range("A1:C36").Select ActiveWindow.Zoom = True Range("A1").Select ActiveWindow.DisplayHeadings = False Application.DisplayFormulaBar = False Application.DisplayFullScreen = True Application.ScreenUpdating = True '--------------------------------------------- scheduledTime = Now + TimeValue("00:01:00") Application.OnTime scheduledTime, MoveNext End Sub Sub StopDisplaying() 'Your stop code: '--------------------------------------------- Application.ScreenUpdating = False Sheets("Daily Dispatch Figures").Select ActiveWindow.Zoom = False ActiveWindow.DisplayHeadings = True Application.DisplayFormulaBar = True Application.DisplayFullScreen = False Application.ScreenUpdating = True '--------------------------------------------- Application.OnTime EarliestTime:=scheduledTime, Procedure:="MoveNext", Schedule:=False End Sub Sub MoveNext() On Error Resume Next Sheets(ActiveSheet.Index + 1).Activate If Err.Number <> 0 Then Sheets(1).Activate On Error Goto 0 scheduledTime = Now + TimeValue("00:01:00") Application.OnTime scheduledTime, MoveNext End Sub