2

私は VBA にはかなり慣れていませんが、これらのフォーラムを読んで自分の道を見つけました。Application.ScreenUpdating が機能しないという問題は一度もありませんでした。オンラインで調査した後、問題の解決策が見つかりません。

デイリー チェックリストに 1 か月のビューを表示するデイリー チェックリスト アプリケーションを Excel で作成しました。タスクは行に並んでおり、カレンダー上のその日のタスクについて、はい、いいえ、または N/a を選択するだけです。チェックリストを保存すると、情報が別のタブのデータ シートにコピーされます。情報を保存するときに Application.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

どんな助けでも大歓迎です。

ありがとう、クリス

4

2 に答える 2

5

個人的には、screenupdating プロパティをチェックせずに false に設定するだけです。VBA の実行が完了すると、画面は通常どおり更新されます。

また、問題は、ワークシートを開いたときに実行される 2 番目のコードが 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
于 2013-08-25T08:54:37.903 に答える