プロが教える店舗&オフィスのセキュリティ対策術

マクロ有効形式で保存している作業ブックがあります、そのブックに設定しているマクロを実行し、マクロが完了した時にマクロを設定している作業ブックを削除する方法を教えてください。
先日より同じような質問をしておりますが、解決出来ておりません。困っておりますので、親切に教えて抱ける方、よろしくお願いいたします。
マクロ
Sub 電子提出()
Application.DisplayAlerts = False
On Error Resume Next
Worksheets(Array("記載方法")).Delete
Worksheets(Array("提出図書(参考)")).Delete
Worksheets(Array("Web申請手順(参考)")).Delete
Worksheets(Array("申請種別")).Delete
Worksheets("提出シート").Activate
Dim rng As Range
Set rng = Selection.Cells
Range("B1", "H47").Select
mybook = ThisWorkbook.Path
ActiveWorkbook.SaveAs Filename:=mybook & "\" & Range("P1").Value & "(提出用).xlsx", FileFormat:=xlOpenXMLWorkbook
rng.Select
Sheets("提出シート").Range("D3,D4,D5,D7").ClearContents
Range("D7").Select
Sheets("提出シート").Shapes("担当者").Visible = False '
ActiveWorkbook.SaveAs Filename:=mybook & "\" & Range("P1").Value, FileFormat:=xlOpenXMLWorkbookMacroEnabled

Application.Quit
With ThisWorkbook
.Saved = True
Application.DisplayAlerts = True
.Close False
End With
Sheets("提出シート").Shapes("新築FD").Visible = False '
Sheets("提出シート").Shapes("計変FD").Visible = False '
Sheets("提出シート").Shapes("増築FD").Visible = False '
Sheets("提出シート").Shapes("担当者").Visible = False '
Range("D7").Select
End Sub
があります、このマクロを実行すると
○○ 様邸【○○】(提出用).xlsx
○○ 様邸【○○】.xlsm
以上の2つのファイルが作業フォルダ内に保存されます。
この2つのファイルが保存されれば、マクロを設定している作業ブックは不要となります。
マクロを実行後に作業ブックを削除出来る方法を教えてください。
以前、同じような質問をした時に
作業ブックを「参照」で開くことで出来ると教えて頂きました。
今回も同じように出来るでしょうか。
よろしくお願いいたします。

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

  • うーん・・・

    回答ありがとうございます。
    ご指示のコードを追加いたしましたが上手く行きまっせんでした。
    Range("D7").Select
    ' 作業ブックを削除
    Application.DisplayAlerts = False
    ThisWorkbook.Saved = True ' 作業ブックを保存済みとしてマーク
    Application.DisplayAlerts = True
    ThisWorkbook.Close SaveChanges:=False ' 作業ブックを保存せずに閉じる
    End Sub
    作業ブックは削除されずに、2つのファイルの内「○○ 新築工事【○○】(提出用).xlsxは上手く保存出来ておりますが、「○○ 様邸【○○】.xlsm」がExcelファイルではない「○○ 様邸【○○】」と保存されてしまいます。解決方法を教えてください。よろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/06/02 10:40
  • うーん・・・

    回答ありがとうございます。
    ご指示通り
    1つ目rのコードを
    ActiveWorkbook.SaveAsStop Filename:=mybook & "\" & Range("P1").Value & "(提出用).xlsx", FileFormat:=xlOpenXMLWorkbook
    rng.Select
    と設定しましたが作業ブックは削除されず、又、保存ファイルも
    ○○ 邸 新築工事【○○】のExcelファイルではないファイルが一つだけ保存されてしまします。
    解決方法を教えてください。
    よろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/06/02 12:53
  • うーん・・・

    回答ありがとうございます。
    試験的に試していただきまして感謝いたします。
    私理解力不足で
    私のコードを貴社の提案通りに変更する能力がありません。申し訳ありませんが
    私のコードを編集していただけますでしょうか。
    又、2つのファイルの内1つは○○ 様邸【○○】.xlsmでの保存なのですが
    無理でしょうか、何度も申し訳ありません。
    解決方法を教えてください。

    No.4の回答に寄せられた補足コメントです。 補足日時:2023/06/02 16:49
  • 色々とありがとうございます
    申し訳ありません
    只今 パソコンから離れてしまいまして
    後ほど試めさせて頂きます
    よろしくお願いします

      補足日時:2023/06/02 18:21

A 回答 (5件)

>Excelファイルではない「○○ 様邸【○○】」と保存されてしまいます。



名前を付けて保存する際に拡張子が抜けているからじゃないかな?

Sub 電子提出_2()
Dim myFull As String

myFull = ThisWorkbook.FullName
Application.DisplayAlerts = False
On Error Resume Next
Worksheets(Array("記載方法")).Delete
Worksheets(Array("提出図書(参考)")).Delete
Worksheets(Array("Web申請手順(参考)")).Delete
Worksheets(Array("申請種別")).Delete
Worksheets("提出シート").Activate
Dim rng As Range
Set rng = Selection.Cells
Range("B1", "H47").Select
mybook = ThisWorkbook.Path
ActiveWorkbook.SaveAs Filename:=mybook & "\" & Range("P1").Value & "(提出用).xlsx", FileFormat:=xlOpenXMLWorkbook
rng.Select
Sheets("提出シート").Range("D3,D4,D5,D7").ClearContents
Range("D7").Select
Sheets("提出シート").Shapes("担当者").Visible = False '
ActiveWorkbook.SaveAs Filename:=mybook & "\" & Range("P1").Value & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

Application.Quit

'---------ここから下は必要なの?-------------'
Sheets("提出シート").Shapes("新築FD").Visible = False '
Sheets("提出シート").Shapes("計変FD").Visible = False '
Sheets("提出シート").Shapes("増築FD").Visible = False '
Sheets("提出シート").Shapes("担当者").Visible = False '
Range("D7").Select
'----------------------------------------------'
Kill myFull

End Sub

未検証でごめんなさい。
    • good
    • 0
この回答へのお礼

おはよう御座います。
ご丁寧に教えて頂きまして、感謝いたします。
全て上手くできました。
ご連絡が遅くなり申し分け有りませんでした。

お礼日時:2023/06/03 09:24

次に自身を削除と言う部分を追加した検証用。



Sub try_2()
Dim myFull As String
Dim myPath As String

myFull = ThisWorkbook.FullName
myPath = ThisWorkbook.Path
Application.DisplayAlerts = False

Range("A1").Value = "ABC"

ActiveWorkbook.SaveAs Filename:=myPath & "\データ1.xlsx", FileFormat:=xlOpenXMLWorkbook

Range("A2").Value = "XYZ"

ActiveWorkbook.SaveAs Filename:=myPath & "\データ2.xlsx", FileFormat:=xlOpenXMLWorkbook

'--------------------
Application.Quit

Kill myFull 'なぜか閉じているマクロ実行Bookをフルパスで指定して削除

End Sub

取り敢えず簡易的には 検証用.xlsm Bookの削除には成功してます。
また データ1.xlsx データ2.xlsx の作成は完了してます。

>Excelファイルではないファイルが一つだけ保存されてしまします。

どんなアイコンか不明ですが、隠しファイルを表示してて透明感のあるアイコンだとしたら開いているBookの関連ファイルか、フォルダの場所によってはシステムに関するものなどかもしれません。
非表示に切り替えて消えるなら気になさらなくても・・・
この回答への補足あり
    • good
    • 0

まず問題の切り分けとして簡易なコードで検証しました。



検証用.xlsm:保存先はデスクトップ

Sub try()
Dim myFull As String
Dim myPath As String

myFull = ThisWorkbook.FullName
myPath = ThisWorkbook.Path
Application.DisplayAlerts = False

Range("A1").Value = "ABC"

ActiveWorkbook.SaveAs Filename:=myPath & "\データ1.xlsx", FileFormat:=xlOpenXMLWorkbook

Range("A2").Value = "XYZ"

ActiveWorkbook.SaveAs Filename:=myPath & "\データ2.xlsx", FileFormat:=xlOpenXMLWorkbook

End Sub

マクロの実行結果としてですが、検証用.xlsm と データ1.xlsx の2つは閉じられてます。
ただし データ1.xlsx はセルにデータが書き込まれてます。
しかもVBE画面では データ2.xlsx に標準モジュールが存在しコードがそこに移った状態でこれだけ開いてます。
セル値も追加された状態です。
    • good
    • 0

自身はありませんが(なのでよく質問者に補足途中でよくブロック受けます)。


しかもパソコンの仕様を問うとあり得るので、これって個人情報保護違反行為なのか?と感じてます。

--------------------------
ちょっと検証してみた感じでは。
・マクロを実行する
・最初のSaveAsで名前を変更されたBookがアクティブになり、マクロを実行したBookは閉じられる?

みたいな結果(正しい動きかは自信ない)になりました。

保存先フォルダで最初のBookや変更され保存されたBookなどがどうなっているか、タスクバーのExcelアイコンにカーソルを当ててみるなり隠しファイルを表示させて
https://support.microsoft.com/ja-jp/windows/wind …
みては如何でしょうか?(薄くアイコンが見えるのが現在開いている状態)

SaveAs の1つ目の後ろで Stop を追加してみるとかで確認出来るかも。

.SaveAs ~
Stop
rng.Select
この回答への補足あり
    • good
    • 0

マクロを実行した後に、マクロを設定している作業ブックを削除する方法を説明します。

マクロを設定している作業ブックを削除するためには、VBAコード内で別の方法を使用する必要があります。

以下のVBAコードを使用して、マクロが完了した後に作業ブックを削除する方法があります。

```
Sub 電子提出()
' マクロの実行内容

' 作業ブックを削除
Application.DisplayAlerts = False
ThisWorkbook.Saved = True ' 作業ブックを保存済みとしてマーク
Application.DisplayAlerts = True
ThisWorkbook.Close SaveChanges:=False ' 作業ブックを保存せずに閉じる
End Sub
```

このVBAコードをマクロに追加すると、マクロが実行された後に作業ブックが削除されます。`ThisWorkbook.Close SaveChanges:=False`の行が作業ブックを閉じるコードであり、`SaveChanges:=False`は変更を保存せずに閉じることを指定しています。

上記のコードを適切な場所に追加して保存し、マクロを実行してください。マクロの実行が完了した後に、作業ブックが自動的に閉じ、削除されます。

なお、マクロが実行された後に作業ブックを参照で開くことはできません。マクロが終了した時点で作業ブックは閉じられているため、参照することができません。
この回答への補足あり
    • good
    • 0

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