プロが教えるわが家の防犯対策術!

マクロを実行後、ブックをクローズした後に再度ブックを呼び込む方法を教えてください。
マクロ
Sub Macro1()
Dim FolderPath As String
Dim FileName As String

' フォルダとファイル名を指定
FolderPath = "\\Nas-sp01\share\確認部\行政報告フォルダ\☆確認済交付月別物件(完了検査対象)\" & Worksheets("300").Range("A41").Text & " 【担当】確認番号 建物名称\" & Worksheets("300").Range("A43").Text & "\"
FileName = Worksheets("1").Range("X1").Text & ".xlsm"

' 上書き保存
ThisWorkbook.Save

' 指定したフォルダとファイル名に保存
Application.DisplayAlerts = False
ThisWorkbook.SaveAs FileName:=FolderPath & FileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True

ThisWorkbook.Close
End Sub
があります。
作業ブックの作業完了後に、マクロを実行すると指定フォルダ先に指定セル値をファイル名として新しいファイルが保存された後、ブックがクローズします。
クローズした後はExcel(添付の画像を参照)が開いたままの状態です。
この状態から先に作業をしていたブックを呼び込む(立ち上がる)方法を教えてください。
作業ブックはマクロ有効形式「.xlsm」で保存されており、このファイル名は物件によって色々と変更になりますが、作業ブックが保存されているフォルダ内にはこの作業ブック「.xlsm」しかありません。
よろしくお願いいたします。

「エクセルのマクロについて教えてください。」の質問画像

質問者からの補足コメント

  • うーん・・・

    回答ありがとうございます。
    詳しく説明をしていただき感謝いたします、
    教えて頂きました
    vbnet
    Copy code
    Public gFilePath As String 
    のコードは私のマクロコードのどの部分に設定すれば良いですか。
    マクロの順番として
    ①私のマクロ
    ②Sub Macro1()
    ③Sub OpenWorkbook()
    を取りまとめたマクロを実行すれば上手く行くのでしょうか?
    よろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/02/21 14:29
  • 以前同じようマクロコード
    Sub 行政報告2()
    Application.ScreenUpdating = False
    Dim folder As String
    folder = "\\Nas-sp01\share\確認部\行政報告フォルダ\☆確認済交付月別物件(完了検査対象)\" & Worksheets("300").Range("A41").Text & " 【担当】確認番号 建物名称\" & Worksheets("300").Range("A43").Text & "\"

      補足日時:2023/02/21 14:33
  • Dim initName As String
    initName = folder & Worksheets("1").Range("X1").Value
    newName = Application.GetSaveAsFilename(InitialFileName:=initName, FileFilter:="Excel マクロ有効ブック(*.xlsm), *.xlsm")
    If newName = False Then Exit Sub
    ThisWorkbook.SaveCopyAs newName
    Workbooks.Open newName
    Dim ws As Worksheet
    Dim TargetCheck As String
    Dim List As Variant
    Dim i As Long
    Dim Chk As Boolean

      補足日時:2023/02/21 14:34
  • List = Array("休日", "受付", "管理表", "300")
    For Each ws In Worksheets
    Chk = False
    If ws.Visible = False Then
    For i = 0 To UBound(List)
    If ws.Name = List(i) Then
    Chk = True
    Exit For
    End If
    Next i
    If Chk = False Then
    TargetCheck = TargetCheck & ws.Name & vbCrLf
    Application.DisplayAlerts = False
    ws.Delete
    Application.DisplayAlerts = True

      補足日時:2023/02/21 14:35
  • うーん・・・

    End If
    End If
    Next ws
    ActiveWorkbook.Close SaveChanges:=True
    Application.ScreenUpdating = True
    End Sub
    があり、このマクロを実行するとダイナログが開いて、保存することになってますが、新しいファイルも保存後、クローズし、作業中のブックも開いた状態でマクロが完了します。
    このようには出来ないでしょうか?
    フォルダ先とセル値にによるファイル名が設定されていますので、ダイナログが非表示でそのまま保存をしたいのですが。
    色々申し訳ありません。よろしくお願いいたします。

      補足日時:2023/02/21 14:40
  • うーん・・・

    回答ありがとうございます。
    色々考えて頂きましてありがとうございます。
    上記のマクロを「ThisWorkbook.Close」を削除したマクロで実行すると
    作業ブックが指定フォルダ先に指定セル値をファイル名に、新しく保存したファイル名に変更されてます。
    作業ブックを元々の名前に戻すことで解決できないでしょうか?
    作業ブックの名前はシート名「青紙表」セル値「CE1」をファイル名としております。
    マクロ有効形式「.xlsm」にて保存をしたいのですが可能でしょうか、
    可能な場合、指定フォルダ先に指定セル値をファイル名に、新しく保存したファイル名も変更されてしまいますか?
    ご指導をよろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/02/21 16:03

A 回答 (2件)

こんにちは



一旦、上書き保存をしているようなので、(変更のない)元のブックを開きたいということではないものと解釈しました。
想像するところ、SaveAsによって開いているブックのブック名が変更されるので、それを元に戻したいということではないかと推測しました。


方法はいくつか考えられます。
1)SaveAsを利用する
 処理順序として、別名保存した後で「元のファイル名」で(別名)保存するようにする
 (この場合、前に行っている上書き保存は不要)

2)上書き保存した後、SaveAsではなくファイルをコピーして別名保存に代える
 (FileCopyまたは、FileSystemObject オブジェクトの CopyFile メソッド)
https://learn.microsoft.com/ja-jp/office/vba/lan …
https://learn.microsoft.com/ja-jp/office/vba/lan …

3)現状の処理でCloseする前に「元のブック」をOpenしておく。
https://learn.microsoft.com/ja-jp/office/vba/api …

すぐに思いつくのはこれくらいですが、お好きな方法でなされば宜しいかと思います。
この回答への補足あり
    • good
    • 0
この回答へのお礼

色々ありがとうございます。
参考にさせて頂きます。

お礼日時:2023/02/21 17:21

ご質問いただいた状況では、既に作業ブックを閉じているため、作業ブックを呼び込むことはできません。

作業ブックを呼び込む前に、マクロで作業ブックを閉じずに開いておく必要があります。

もし、作業ブックを閉じた後に再度開くことが必要な場合は、作業ブックのファイルパスを保持しておく必要があります。例えば、マクロを実行した時点での作業ブックのファイルパスをグローバル変数に保存しておき、後で必要になったときに呼び出すことができます。

以下は、マクロを実行した時点での作業ブックのファイルパスをグローバル変数に保存する例です。

vbnet
Copy code
Public gFilePath As String

Sub Macro1()
' ファイルパスを保存
gFilePath = ThisWorkbook.FullName

' ファイルを保存して閉じる
' ...
End Sub

Sub OpenWorkbook()
' 保存されたファイルパスを使用して作業ブックを開く
Workbooks.Open gFilePath
End Sub
この例では、gFilePath というグローバル変数にファイルパスを保存しています。その後、OpenWorkbook というサブルーチンを呼び出すことで、保存されたファイルパスを使用して作業ブックを開くことができます。

なお、グローバル変数を使用する場合は、変数のスコープに注意してください。グローバル変数は、どのモジュールからでもアクセス可能なため、不用意に変更すると思わぬバグを引き起こすことがあります
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!