Excle VBA – “Screenupdating = True”故障:屏幕不刷新(例如更改工作表视图)

我有一个工作簿的问题,而不是将视图更改为新的隐藏/激活的工作表之间切换屏幕更新从closures到打开和closures – 它实际上并没有刷新屏幕。 (代码如下)

我有一个模块,调用一个主要sub的子窗体来执行一些任务 – 在每个子(除了main)之外,我closures了开始屏幕更新并在最后打开它(下面的例子)。 工作簿有许多用于处理的工作表(大部分是隐藏的),或作为最终的可见视图 – 打开时,只有一个工作表可见(用于启动主子工具)。

在运行时,其中一个子项取消隐藏并激活最终的工作表,然后删除开始的工作表 – 并切换屏幕更新(“True”),并退出到主子(再次调用另一个子)。

但是它不会改变视图,视图停留在删除的表单上,而子视图都完成。 (我可以通过插入一个“MsgBox”来“欺骗”它进入新的活动工作表,但不想这么做。)

对于我来说,search答案是一件困难的事情(因为查找“屏幕更新”和其他任何内容都会带来无数关于“如何停止更新屏幕”的答案)。

Sub createADS() Dim oneForm As Object Set MainWrkBk = ActiveWorkbook cancel = False 'initialise Call ADSheaderFormShow Set MainWrkBk = ActiveWorkbook 're-Set MainWrkBk after doing "SaveAs" in previous form Call ADSformGen MainWrkBk.Worksheets("ADSform").Activate 'Doesn't change view 'MsgBox "Enter antenna information from RFDS" '^^^ Tricks it into refreshing worksheet when active Call ADSinputFormShow Call ADSsetAntennas Call ADSpullData GoTo ExitHandler ExitHandler: For Each oneForm In UserForms Unload oneForm ThisWorkbook.Save Next oneForm Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub Private Sub ADSformGen() Application.ScreenUpdating = False 'Returned to True after running sub MainWrkBk.Worksheets("HidDbSh").Visible = True MainWrkBk.Worksheets("HidDbSh").Cells(1, 1).Value = "Site Info" MainWrkBk.Worksheets("HidSiteTemp").Range("a1").CurrentRegion.Copy _ Destination:=MainWrkBk.Worksheets("HidDbSh").Cells(2, 1) Columns.AutoFit Application.Calculation = xlCalculationAutomatic 'to reset all formula calcs before deleting source MainWrkBk.Worksheets("HidDbSh").Visible = False Application.DisplayAlerts = False MainWrkBk.Worksheets("HidSiteTemp").Delete Application.DisplayAlerts = True MainWrkBk.Worksheets("HidADSform").Visible = True MainWrkBk.Worksheets("HidADSform").Name = "ADSform" With MainWrkBk.Worksheets("ADSform").UsedRange .Copy .PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False End With Application.DisplayAlerts = False MainWrkBk.Worksheets("BlankADSForm").Delete Application.DisplayAlerts = True MainWrkBk.Worksheets("ADSform").Activate MainWrkBk.Worksheets("ADSform").Range("B2").Select Application.ScreenUpdating = True End Sub 

如果要确保在激活表单时更新屏幕,请激活屏幕之前先closures屏幕更新。 否则,您将冒着Activate呼叫将导致吞咽的重绘事件的风险:

  '... Application.ScreenUpdating = True MainWrkBk.Worksheets("ADSform").Activate MainWrkBk.Worksheets("ADSform").Range("B2").Select End Sub