• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:値の受け渡し)

VBAで保存したシートに戻る方法は?

このQ&Aのポイント
  • VBAを使用している場合、閉じる操作ではなくCtrl+Sで保存した場合、表示されるシートが正しくないことがあります。
  • Workbook_BeforeSaveイベントを使用して、保存時に表示するシートと非表示にするシートを指定します。
  • Workbook_AfterSaveイベントを使用して、保存後に表示するシートの設定を行います。保存したシートに戻るためには、ActiveWorkbook.Pathプロパティを使用して、ファイルのパスを取得し、Workbooks.Openメソッドでファイルを開く必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.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

epiko
質問者

お礼

回答ありがとうございました。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

割と安直に ’以下コピー 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 といった具合でいいと思いますよ。

epiko
質問者

お礼

回答ありがとうございます。

関連するQ&A