我遇到的问题是工作簿没有将视图更改为新的未隐藏/激活的工作表,而是将屏幕更新从关闭再打开再打开 - 它实际上并没有刷新屏幕。 (以下代码)
我有一个模块,它从一个主子调用form和subs来执行一些任务 - 在每个子中(除了main)我在开始时关闭屏幕更新并在结束时打开它(例子下面)。工作簿有许多工作表(大多数是隐藏的),用于处理或作为最终的可见视图 - 打开时,只有一个工作表可见(用于启动主要子工作)。
运行时,其中一个子组件取消隐藏并激活最终工作表,然后删除起始工作表 - 并重新打开屏幕更新(" True"),然后退回到主子组(调用再来一个子)。
但它没有改变视图,视图保留在已删除的工作表上,而子视图全部完成。 (我可以"通过插入" MsgBox"来改变对新活动工作表的视图 - 但不想这样做。)
这对我来说很难找到答案(因为查找" Screenupdating"其他任何事情都会带来无数关于&#34的答案;如何阻止屏幕更新&#34 ;)
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
答案 0 :(得分:2)
如果您想确保在激活工作表时屏幕更新,请在之前打开屏幕更新,然后再激活。否则,您冒着重绘事件的风险,Activate
调用将生成吞下:
'...
Application.ScreenUpdating = True
MainWrkBk.Worksheets("ADSform").Activate
MainWrkBk.Worksheets("ADSform").Range("B2").Select
End Sub