- ベストアンサー
VBAで保存したシートに戻る方法は?
- VBAを使用している場合、閉じる操作ではなくCtrl+Sで保存した場合、表示されるシートが正しくないことがあります。
- Workbook_BeforeSaveイベントを使用して、保存時に表示するシートと非表示にするシートを指定します。
- Workbook_AfterSaveイベントを使用して、保存後に表示するシートの設定を行います。保存したシートに戻るためには、ActiveWorkbook.Pathプロパティを使用して、ファイルのパスを取得し、Workbooks.Openメソッドでファイルを開く必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。お邪魔します。 > Private Sub Workbook_afterSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ↓ Private Sub Workbook_AfterSave(ByVal Success As Boolean) イベントプロシージャの引数は勝手に書換えできませんので注意しましょう。 (というより、_afterSaveと_BeforeSaveでは引数が異なります。) また、シートの表示を変更したら、 再度、ブックを保存済の状態に設定し直さなければなりませんので Me.Saved = True と、記述を書き加える必要があります。 これがないと、変更してないのに、ブックを閉じる時に保存を求められてしまい 鬱陶しいことになります。 幾つか方法ありますけど、比較的簡単で平易に扱えるものを 汎用性と堅実さを基準に選びました。 _BeforeSaveの時点で 選択されているシート【Sheets】 を 【Sheets型変数shsSelected】に 表示中のシート【Worksheet】または【Chart】他 を 【Object変数shActive】に、 それぞれ一旦確保しておいて _AfterSave時に 【shsSelected.Select】 【shActive.Activate】 で、元に戻ります。 複数シートが作業グループになっている状態で上書き保存しても 【選択中のシート】、【表示中にシート】を現状に戻します。 シートの種類(ワークシート、グラフなど)は何でもいいように書いてます。 条件として、ThisWorkbookがアクティブであること、が必要です。 VBAから.Saveする時にはアクティブにする工夫が必要ですが、 今回の課題には関係なさそうなので触れません。 以下、ThisWorkbookモジュールに"過不足なく"そのままコピペしてから 試してみて、確認がとれたら、実際のブックで運用してみてください。 Option Explicit ' 8115858 Private shsSelected As Sheets Private shActive As Object Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Set shsSelected = ActiveWindow.SelectedSheets Set shActive = ActiveSheet Sheets("はじめに").Visible = True Sheets("松").Visible = False Sheets("竹").Visible = False Sheets("梅").Visible = False End Sub Private Sub Workbook_AfterSave(ByVal Success As Boolean) Sheets("松").Visible = True Sheets("竹").Visible = True Sheets("梅").Visible = True Sheets("はじめに").Visible = False ' ' ★保存をしたシートに戻りたい If shsSelected Is Nothing Then Exit Sub shsSelected.Select If shsSelected.Count > 1 Then shActive.Activate Set shsSelected = Nothing Set shActive = Nothing Me.Saved = True End Sub Private Sub Workbook_Open() Sheets("松").Visible = True Sheets("竹").Visible = True Sheets("梅").Visible = True Sheets("はじめに").Visible = False Me.Saved = True End Sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
割と安直に ’以下コピー dim s as worksheet Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) set s = activesheet Sheets("はじめに").Visible = True Sheets("はじめに").Select Sheets("松").Visible = False Sheets("竹").Visible = False Sheets("梅").Visible = False End Sub Private Sub Workbook_afterSave(ByVal Success As Boolean) Sheets("松").Visible = True Sheets("竹").Visible = True Sheets("梅").Visible = True Sheets("はじめに").Visible = False ’★保存をしたシートに戻りたい s.select End Sub Private Sub Workbook_Open() Sheets("松").Visible = True Sheets("竹").Visible = True Sheets("梅").Visible = True Sheets("はじめに").Visible = False End Sub といった具合でいいと思いますよ。
お礼
回答ありがとうございます。
お礼
回答ありがとうございました。