Application.ScreenUpdating不会更改为false

我对VBA相当陌生,但通过阅读这些论坛,我find了解决办法。 我从来没有遇到与Application.ScreenUpdating不工作的问题,经过在线研究,我无法find我的问题的答案。

我在Excel中创build了一个Daily Checklist应用程序,在Daily Checklist中提供了一个月视图。 这些任务按行排列,只需在日历上select是,否或不适用于该任务。 您可以保存清单,并将信息复制到单独的选项卡中的数据表。 除了保存信息时,一切正常,除非Application.Screenupdating不起作用,用户最终会看到数据表和日历视图之间闪烁并跳来跳去。

为什么Application.ScreenUpdating没有改变为false的任何想法或指导? 我试过在不同的地方移动它,但似乎没有任何工作。

这是Save checklist子项:

Sub Save_Checklist() Dim Checklist_Date Dim Completed As Long Dim Left_to_Complete As Long Dim Database_Date As Range Dim Database_Row As Long Dim bScrUpdate bScrUpdate = Application.ScreenUpdating If bScrUpdate = True Then Application.ScreenUpdating = False Worksheets("Database").Unprotect Password:="youngC" If MsgBox("This button will save this month's checklist data into the database. All previous information will be overwritten. Would you like to continue?", vbYesNoCancel, "Reset the Calender") = vbYes Then Checklist_Date = Worksheets("Daily Checklist").Range("E4").Value Add_to = Worksheets("Daily Checklist").Range("AL1").Value Range("E55").Select ActiveCell.Resize(2, Add_to).Select Selection.Copy On Error Resume Next With Worksheets("Database").Activate Range("A1:A366").Select Selection.Find(What:=Checklist_Date, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , SearchFormat:=False).Select On Error GoTo 0 If Not Database_Date Is Nothing Then Application.Goto Database_Date, True End With Selection.Offset(0, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Worksheets("Database").Protect Password:="youngC" Else MsgBox ("Please be sure all information is correct before saving it.") End If If Not Application.ScreenUpdating = bScrUpdate _ Then Application.ScreenUpdating = bScrUpdate End Sub 

这是我在工作簿打开时运行的代码(我在“将任务添加到月份日历”表中进行分组):

 Private Sub Workbook_Open() Worksheets("Main Menu").Activate With Worksheets("Add Tasks to Month's Calendars") .EnableOutlining = True .Protect Password:="youngC", _ Contents:=True, UserInterfaceOnly:=True End With End Sub 

任何帮助都将不胜感激。

谢谢,克里斯

就个人而言,我只是将screenupdating属性设置为false而不检查它,一旦VBA运行完毕,屏幕将会正常更新。

另外,我认为问题在于打开工作表时运行的第二个代码不会将screenupdating变为false,因此您将看到所描述的所有移动。 Excel不记得上一个macros的screenupdating被设置为false,即使它已经把代码打开了。 你应该能够通过在你的第一行上设置screenupdating来解决这个问题,修改如下所示。

 Private Sub Workbook_Open() Application.ScreenUpdating = False Worksheets("Main Menu").Activate With Worksheets("Add Tasks to Month's Calendars") .EnableOutlining = True .Protect Password:="youngC", _ Contents:=True, UserInterfaceOnly:=True End With End Sub