【发布时间】:2014-12-25 12:09:09
【问题描述】:
长时间运行宏后,即使宏完成,Excel 中的 ScreenUpdating 也会完全停止工作。我从未将其设置为 false,但它的行为就像设置为 false 一样,使 Excel 再次更新屏幕的唯一方法是将其关闭并重新打开。但是 VBA 屏幕可以工作。我曾尝试运行 DoEvents 和 ScreenUpdating=True 但 Excel 窗口不会在视觉上更新(它没有被冻结)。是否有清除 ScreenUpdating 缓冲区的方法?我已经尝试手动将其设置为 false 和 true 无济于事。
如果您想复制此错误,请使用此代码
Application.OnTime (Now + TimeValue("0:00:05")), "macroName", (Now + TimeValue("0:00:10")), True
然后我复制代码并粘贴一些值,并控制循环何时停止,例如单元格 A1 中的倒计时值。
【问题讨论】:
-
@PortlandRunner 视图 -> 即时窗口 (Ctrl+G),即使没有更新屏幕也会弹出此窗口,如果我开始单击,我可以无形地告诉我正在与 Excel 工作表交互背景,但它的行为与 ScreenUpdating 设置为 false 完全相同。在即时窗口中,我尝试 Application.ScreenUpdating=False 然后 True 并且没有任何变化。就好像我从所有的复制和粘贴中炸毁了 ScreenBuffer。问题是它几乎每次都会发生(它也很随机!)。
-
我从来没有见过这个,ScreenUpdating=True 的独立子一直对我有用。
-
@n8 问题是我什至根本没有在我的宏中关闭 ScreenUpdating,但它的行为就像它已关闭一样。一定有某种屏幕缓冲区溢出。当我改变窗户太多时,它也会这样做。我希望有某种方法可以清除屏幕缓冲区。
-
是的,我明白了。我想知道您是否可以在不更改屏幕的情况下发送数据。我喜欢在不更改表格的情况下编写数据,这种方法可能会对您有所帮助。像 Sheets(1).Cells(1,1) = Cells(1,1) 而不是 Cells(1,1).Copy, Sheets(1).Activate, Cells(1,1).Paste
-
@n8 这就是我目前的做法,也可能是我每秒更新的单元格太多。但我希望有一些 VBA 方法来修复此屏幕溢出或其他问题。