2013-08-24 27 views
2

我是很新,VBA,但我已經通過這些論壇閱讀發現在我的方式。我從來沒有遇到與Application.ScreenUpdating不工作,並經過在線研究的問題,我無法找到我的問題的答案。Application.ScreenUpdating不會更改爲false

我創建在Excel中給出了每日清單一個月視圖中的每日清單中的應用。這些任務按行排隊,您只需在日曆上選擇該任務的yes,no或N/a。您可以保存清單,並將信息複製到單獨的選項卡中的數據表。除了在保存信息時Application.Screenupdating不起作用並且用戶最終看到數據表和日曆視圖之間的閃爍和跳來跳去之外,一切都很完美。

爲什麼Application.ScreenUpdating沒有改變,以虛假的任何意見或指導?我嘗試過在不同的區域移動它,但似乎沒有任何工作。

這裏的保存清單子:

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 

任何幫助都將不勝感激。

謝謝, 克里斯

+0

你的標題說它不會變成'FALSE',但你的問題說它不起作用。這是什麼? –

+0

另外,我不認爲它做任何傷害,但設置了'Boolean'值'FALSE'如果是TRUE;是一樣,它設置爲'FALSE',所以你可以縮短代碼,這兩條線。 –

+1

我對問題中的誤解表示歉意。宏運行得很好,所以代碼工作。 Application.Screenupdating = False不起作用,因此當用戶單擊分配給此宏的按鈕時,屏幕會更改。 –

回答

4

個人而言,我只想設置ScreenUpdating屬性設置爲false,而不檢查它,一旦VBA運行完畢後,屏幕將升級爲正常。

而且我覺得現在的問題是,當你打開工作表運行代碼的第二peice的不轉screenupdating爲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 
+0

非常贊同。如果我確實存儲了這個值,我會將它聲明爲布爾值。我將存儲像Calculation這樣的屬性以前的值,並重新設置它們,就像在OP中一樣。也就是說,存儲並重新設置用戶設置。 –

+0

我不同意和測試它。如果application.screenupdating = true並且您再次設置application.screenupdating = true,您將看到屏幕閃爍。我的客戶對此抱怨,所以我不得不將每條語句都改爲「if not(application.screenupdating = true)then application.screenupdating = true」。順便說一句,我有同樣的問題,我把它設置爲False,它不會是假的。在調試中,當我將鼠標懸停在application.screenupdating上時,它表示True,但在同一個監視窗口中,它表示False。我不知道這意味着什麼。 –

相關問題