【问题标题】:Microsoft Excel 2013 ScreenUpdating failsMicrosoft Excel 2013 屏幕更新失败
【发布时间】: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 方法来修复此屏幕溢出或其他问题。

标签: vba excel


【解决方案1】:

我在 Excel 2013 中遇到了这个问题。对我来说,这是我加载用户表单时引起的。然而,这非常非常奇怪。经过大量试验和错误后,我发现导致它使用 Sheets("MySheet").Activate 命令的原因。我将此命令从在显示并关闭表单后运行到立即显示表单之前(即,当用户单击“显示表单”按钮时立即运行。)这修复了它。尝试摆弄您的 sheet.activate 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多