Excle VBA - " Screenupdating = True"故障:屏幕无法刷新(例如更改工作表视图)

时间:2016-03-23 00:22:26

标签: excel vba excel-vba

我遇到的问题是工作簿没有将视图更改为新的未隐藏/激活的工作表,而是将屏幕更新从关闭再打开再打开 - 它实际上并没有刷新屏幕。 (以下代码)

我有一个模块,它从一个主子调用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

1 个答案:

答案 0 :(得分:2)

如果您想确保在激活工作表时屏幕更新,请在之前打开屏幕更新,然后再激活。否则,您冒着重绘事件的风险,Activate调用将生成吞下:

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