2

題して。これは私を怒らせており、ウェブ上の他の場所への参照を見つけることができません.

通常、次を使用して非表示になっている VBA を含むワークブックがあります。

ThisWorkbook.Windows(1).Visible = False

ただし、ワークブックを閉じると、ウィンドウが表示され、マクロを有効にするようにユーザーに指示する「特別な」ワークシートが表示されるデフォルトの状態に戻す必要があります。これは、次のユーザーがマクロを無効にしてブックを開いた場合のガイダンスを提供するためのものです。マクロを有効にしてワークブックを開くと、Workbook_Open イベントによってこのメッセージが再び非表示になり、その時点で通常の操作が続行されます。

私の問題は.Windows().Visible、ワークブックの _BeforeClose イベント (Excel が終了するときにのみ発生する) からプロパティを変更すると、ワークブックが単に画面に残ることです。.Windows().Visibleこの動作を引き起こしているプロパティを確実に設定していることを確認しました。

ThisWorkbook.IsAddinこれはユーザーのビューからワークブックを「非表示」にするのと同じ効果があるため、プロパティを使用してみましたが、まったく同じ動作が発生します。

また、マクロを無効にしてワークブックを開くとプロパティが無視されることを期待して、ウィンドウの可視性をまったく変更しないようにしましたが、そうではありません。

目的の動作を引き起こすために私ができる唯一のことはThisWorkbook.Close、_BeforeClose イベント自体の最後の行として持つことですが、これにより不安定性が発生し、時折「Excel が予期せず終了しました。回復/再起動しますか?」というメッセージが表示されます。Excel が終了した後のメッセージ。

どんなヘルプ/ポインタもありがたく受け入れました。新しいバージョンの Excel にアクセスできません。

私のコード:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Application.ScreenUpdating = False

    Call cleanUp

    Application.ScreenUpdating = True

End Sub

Private Sub cleanUp()

Dim s As Worksheet

    shtZNM.Visible = xlSheetVisible

    For Each s In ThisWorkbook.Sheets
        If Not s Is shtZNM Then s.Visible = xlSheetHidden
    Next s

    With ThisWorkbook.Windows(1)
        .DisplayWorkbookTabs = False
        .DisplayHorizontalScrollBar = False
        .DisplayVerticalScrollBar = False
        .Visible = True '<==REMOVING THIS ALLOWS _BEFORECLOSE TO WORK AS EXPECTED
    End With

    On Error Resume Next
    Application.CommandBars("QCS").Delete
    Err.Clear
    Application.CommandBars("Worksheet Menu Bar").Controls("QCS").Delete

    Me.Save

End Sub
4

0 に答える 0