こんにちは。
現在ユーザーに常にマクロを起動して開いてほしいファイルがありまして、下記のコードを記述しダミーシートをオンにしないと作業シートを開けないようにしています。
【ファイルA.xlsm】
Dim temsheet As Worksheet Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Application.ScreenUpdating = False '全シート表示 For Each temsheet In ThisWorkbook.Worksheets temsheet.Visible = True Next 'ダミーシートのみ表示 For Each temsheet In ThisWorkbook.Worksheets If Not temsheet.Name = "ダミーシート" Then temsheet.Visible = False End If Next Application.ScreenUpdating = True End Sub Private Sub Workbook_AfterSave(ByVal Success As Boolean) Application.ScreenUpdating = False '全シート表示 For Each temsheet In ThisWorkbook.Worksheets temsheet.Visible = True Next '作業シート以外は非表示 For Each temsheet In ThisWorkbook.Worksheets If temsheet.Name = "ダミーシート" Then temsheet.Visible = False End If Next ThisWorkbook.Saved = True Application.ScreenUpdating = True End Sub Private Sub Workbook_Open() Application.ScreenUpdating = False '全シート表示 For Each temsheet In ThisWorkbook.Worksheets temsheet.Visible = True Next '作業シート以外は非表示 For Each temsheet In ThisWorkbook.Worksheets If temsheet.Name = "ダミーシート" Then temsheet.Visible = False End If Next Application.ScreenUpdating = True End Sub
この記述のあるファイルを別のファイルから下記のようなコードイメージでいじっているんですが、Workbook_BeforeSaveイベント内の処理がうまく機能しません。具体的には、visibleプロパティがうまく代入されていないようです。
【ブックB.xlsm】
※コードイメージです。
Sub test() Workbooks.Open "~\Aファイル.xlsm" Workbooks("Aファイル.xlsm").ActiveSheet.Range("A1") = 1 Workbooks("Aファイル.xlsm").Save End Sub
Workbook_OpenイベントとWorkbook_AfterSaveイベントはうまく機能しています。
原因を色々調べてみたのですが、全くわからずもし解決策が分かる方がいらっしゃいましたらご教授頂けると嬉しいです。
保存前イベント(Workbook_BeforeSave)でダミーシートを表示させ、保存後(Workbook_AfterSave)でダミーシートを非表示にしたい理由は何でしょうか?
それとも、今回はWorkbook_AfterSaveの動作は無視していいのでしょうか?
ご質問ありがとうございます!
保存前に作業シートを非表示にしダミーシートのみを表示させたい理由は、次回エクセルファイルを開く際に「コンテンツの有効化」をオン(マクロを起動)にしないと実際に使用する作業シートが出てこないようにしたかったからです。
実際にはダミーシートには「コンテンツの有効化をオンにしてください。」というメッセージを記入しております。
保存後にAfterSaveにて作業シートのみを表示させているのは、保存後もそのまま閉じず、作業シートを継続して利用する場面が多々あるからです。
ただ、Workbook_OpenイベントとWorkbook_AfterSaveイベントの動作は無視していただいて大丈夫です。
特に問題なく動いているように思えます。
一度コンテンツの有効化をしたためそれ以降は有効化を求められず、
Workbook_Openが正常に動いています。
「コンテンツの有効化」が求められる状況では、
意図通り「ダミーシート」のみ表示されていました。
うまくいかないと思われる状況をもう少し詳しく教えていただけないでしょうか。
⇒kenshirouさんの回答によると現象が再現するようですね。失礼しました。
ご回答いただきありがとうございます!
内容がわかりづらくなってしまい、大変申し訳ありませんでしたm(__)m
回答1件
あなたの回答
tips
プレビュー