指定した場所以外でファイルを開くとファイルを削除するマクロ【ExcelVBA】
■WshShellクラスオブジェクト WSH Windows Script Host →プログラムの実行やレジストリ内容の操作、ショートカットの作成等ができる
Runメソッドでプログラムを実行し、%ComSpec% コマンドプロンプトの実行ファイルパス /c Cドライブを指定して
WindowStyle 0 非表示に設定し、WaitOnReturnはTRUE プログラムの実行が終了するまで中断 FALSE プログラムの実行が終了しなくても次へから
Falseにし、非同期実行させることでファイルを閉じた後に削除が実行される形をとる
そうすることでマクロを実行しているファイルを削除することが可能
その為、秒数待機を行うtimeoutコマンドを使用し、待機させたい秒数を指定
複数のコマンド実行をする場合は" & "で繋げる
※マクロが実行有効の環境でなければ実行できない
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
実際に使用したサンプルコード
Option Explicit
'このブックが開かれた時に起動する
Private Sub Workbook_Open()
'場所の判定 許可する場所
Dim 許可 As String
許可 = "C:\Users\〇〇\Desktop"
'許可する場所とこのファイルの場所が違うのであれば
If 許可 <> ThisWorkbook.Path Then
'shで使用できるように設定
Dim sh As Object
Set sh = CreateObject("Wscript.shell")
'メッセージボックス
MsgBox "こらー"
'ファイル名を文字列で宣言
Dim ファイル名 As String
ファイル名 = ThisWorkbook.Path & "\" & ThisWorkbook.Name
'プログラムを実行する
sh.Run Command:="%ComSpec% /c" & "timeout 3 & " & "del " & ファイル名, WindowStyle:=0, waitonreturn:=False
'アプリケーションを終了する
Application.Quit
End If
End Sub