我对VBA还是很陌生,但是通过阅读这些论坛,我找到了解决方法。我从未遇到过Application.ScreenUpdating出现问题的问题,并且在进行了在线研究后,找不到我的问题的答案。
我已经在excel中创建了每日检查清单应用程序,该应用程序在“每日检查清单”中提供了一个月视图。任务排成一行,您只需在日历的当天为该任务选择是,否或不适用。您可以保存清单,并将清单信息复制到单独的选项卡中的数据表中。除了保存应用程序信息外,其他所有功能都可以正常运行。Screenupdating无法正常工作,并且用户最终会看到数据表和日历视图之间的闪烁和来回跳动。
关于为什么Application.ScreenUpdating不会更改为false的任何想法或指导?我尝试过在不同的区域中移动它,但是似乎没有任何效果。
这里是保存清单子:
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完成运行,屏幕将正常更新。
[另外,我认为问题在于,打开工作表时运行的第二个代码不会将屏幕更新设置为false,因此您将看到所描述的所有动作。 Excel不会记得先前的宏将screenupdating设置为false,即使您执行了代码,也无论如何都将其重新打开。您应该可以通过在第一行上将screenupdating设置为false来解决此问题,修改如下所示。
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
如果在运行期间打印调试状态,它将为false,但是在调试模式下,由于代码处于暂停模式,因此它将始终为true,并且在运行之前,它将自动切换回true。再次在“快速”模式下使用]