この記事では、ファイルをゴミ箱に移動する方法についてご説明します。
【動画】オートフィルを使用可・使用不可にする実際の動き
本題に入る前に、まずは次の動画をご覧ください。
API関数SHFileOperationを実行して、指定のファイルをゴミ箱に移動しています。
マクロ作成の流れ
設定後はオートフィルが使用可になります。
API関数SHFileOperationの処理が完了すると、ファイルがゴミ箱に移動されます。
コードの例
Excelのマクロのコード(例)
Option Explicit 'ファイルをごみ箱に送るのに使うAPI関数SHFileOperationを宣言 Private Declare PtrSafe Function SHFileOperation Lib "SHELL32.DLL" _ (lpFileOp As SHFILEOPSTRUCT) As LongLong 'ファイル操作に関する情報を定義する構造体(オプション) Private Type SHFILEOPSTRUCT hwnd As LongPtr 'ウィンドウハンドル wFunc As Long '実行する操作 pFrom As String '操作する対象のファイル pTo As String '移動先 fFlags As Integer 'オプション fAnyOperationsAborted As Long '結果 hNameMappings As Long 'ファイル名マッピングオブジェクト lpszProgressTitle As String 'ダイアログのタイトル End Type Private Const FO_DELETE = &H3 '削除 Private Const FOF_ALLOWUNDO = &H40 'ゴミ箱に移動する Private Const FOF_NOCONFIRMATION = &H10& '確認なし Private Const FOF_NOERRORUI = &H400& 'エラーのダイアログを非表示にする Private Const FOF_MULTIDESTFILES = &H1& '複数ファイル指定 Private Sub btn_AFEnblCng_Click() Dim SH As SHFILEOPSTRUCT 'ファイル操作に関する情報を定義する構造体(オプション) Dim result As LongPtr '処理結果 Dim MyFlag As Integer 'オプション With SH .hwnd = Application.hwnd 'ウィンドウハンドル .wFunc = FO_DELETE '削除する .pFrom = Range("fileFPath").Value '削除対象のファイル名を取得する 'オプションの設定 MyFlag = MyFlag + FOF_ALLOWUNDO 'ゴミ箱に移動する MyFlag = MyFlag + FOF_NOCONFIRMATION '確認なし MyFlag = MyFlag + FOF_NOERRORUI 'エラーのダイアログを非表示にする MyFlag = MyFlag + FOF_MULTIDESTFILES '複数ファイル指定 .fFlags = MyFlag 'オプションを取得する End With 'SHFileOperation関数を実行し、ファイルをゴミ箱に移動する result = SHFileOperation(SH) End Sub
コードの解説
注目すべきコード①
最初に見て頂きたいのは4、5行目です。
'ファイルをごみ箱に送るのに使うAPI関数SHFileOperationを宣言 Private Declare PtrSafe Function SHFileOperation Lib "SHELL32.DLL" _ (lpFileOp As SHFILEOPSTRUCT) As LongLong
4、5行目で、ファイルをごみ箱に送るのに使うAPI関数SHFileOperationを宣言します。
API関数を使う場合は上記のコードのようにAPI関数の宣言をしないと使えないので、必ずAPI関数の宣言のコードを記述します。
上記のコードが記述されたことでAPI関数SHFileOperationが使えるようになります。
記述しないと下のようにエラーが発生するので忘れないようにしましょう。
注目すべきコード②
次に見て頂きたいのは8行目から23行目です。
'ファイル操作に関する情報を定義する構造体(オプション) Private Type SHFILEOPSTRUCT hwnd As LongPtr 'ウィンドウハンドル wFunc As Long '実行する操作 pFrom As String '操作する対象のファイル pTo As String '移動先 fFlags As Integer 'オプション fAnyOperationsAborted As Long '結果 hNameMappings As Long 'ファイル名マッピングオブジェクト lpszProgressTitle As String 'ダイアログのタイトル End Type Private Const FO_DELETE = &H3 '削除 Private Const FOF_ALLOWUNDO = &H40 'ゴミ箱に移動する Private Const FOF_NOCONFIRMATION = &H10& '確認なし Private Const FOF_NOERRORUI = &H400& 'エラーのダイアログを非表示にする Private Const FOF_MULTIDESTFILES = &H1& '複数ファイル指定
8行目から17行目まではファイル操作に関する情報を定義する構造体の記述で、ゴミ箱に移動するファイル名やオプションなどを格納する変数を、SHFILEOPSTRUCTの構造体の中に宣言しています。
19行目から23行目では、ゴミ箱に移動する、エラーのダイアログを非表示にするなどの操作に関する定数を宣言しています。
注目すべきコード③
次に見て頂きたいのは31行目から45行目です。
With SH .hwnd = Application.hwnd 'ウィンドウハンドル .wFunc = FO_DELETE '削除する .pFrom = Range("fileFPath").Value '削除対象のファイル名を取得する 'オプションの設定 MyFlag = MyFlag + FOF_ALLOWUNDO 'ゴミ箱に移動する MyFlag = MyFlag + FOF_NOCONFIRMATION '確認なし MyFlag = MyFlag + FOF_NOERRORUI 'エラーのダイアログを非表示にする MyFlag = MyFlag + FOF_MULTIDESTFILES '複数ファイル指定 .fFlags = MyFlag 'オプションを取得する End With
33行目から35行目では、ファイルをゴミ箱に移動する、どのファイルをゴミ箱に移動するなどの設定を、SH(SHFILEOPSTRUCT構造体)の変数(hwndやpFromなど)に設定しています。
38行目から41行目では、オプション(ゴミ箱に移動する、エラーのダイアログを非表示にするなど)を変数「MyFlag」に設定しています。
ゴミ箱に移動するのに必要な情報は以上で揃いました。
注目すべきコード④
次に見て頂きたいのは48行目です。
'SHFileOperation関数を実行し、ファイルをゴミ箱に移動する result = SHFileOperation(SH)
上記のコードでは、SH(SHFILEOPSTRUCT構造体)をSHFileOperation関数の引数に指定し実行しています。
実行が完了すると、ファイルがゴミ箱に移動されます。
動作確認
①マクロ実行前:単一ファイル
パス「C:\work\10_勉強\10_VBA関連\0131\test」というフォルダにある「data.csv」をゴミ箱に移動するよう指定。
パス「C:\work\10_勉強\10_VBA関連\0131\test」には「data.csv」というファイルが存在している。
①マクロ実行後
マクロ実行後は、パス「C:\work\10_勉強\10_VBA関連\0131\test」からファイル「data.csv」がなくなっている。
ゴミ箱を見てみると、ファイル「data.csv」が存在している。
以上で、正常にファイルがゴミ箱に移動されたことが確認できました。
②マクロ実行前:拡張子を指定して削除
パス「C:\work\10_勉強\10_VBA関連\0131\test」というフォルダにある拡張子「ini」のファイルをゴミ箱に移動するよう指定。
パス「C:\work\10_勉強\10_VBA関連\0131\test」には拡張子「ini」のファイルが存在している。
②マクロ実行後
マクロ実行後は、パス「C:\work\10_勉強\10_VBA関連\0131\test」から拡張子「ini」のファイルがなくなっている。
ゴミ箱を見てみると、拡張子「ini」のファイルが存在している。
以上で、正常にファイルがゴミ箱に移動されたことが確認できました。
③マクロ実行前:フォルダ内のファイルを全削除
パス「C:\work\10_勉強\10_VBA関連\0131\test」というフォルダ内にあるファイルを全てゴミ箱に移動するよう指定。
パス「C:\work\10_勉強\10_VBA関連\0131\test」には下の通りファイルが存在している。
③マクロ実行後
マクロ実行後は、パス「C:\work\10_勉強\10_VBA関連\0131\test」からファイル全てがなくなっている。
ゴミ箱を見てみると、パス「C:\work\10_勉強\10_VBA関連\0131\test」にあったファイル全てが存在している。
以上で、正常にファイルがゴミ箱に移動されたことが確認できました。
最後に
本記事では、ファイルをゴミ箱に移動する方法についてご説明しました。
マクロでファイルをゴミ箱に移動したい場合は是非参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。