- ベストアンサー
ExcelVBA ファイルを削除する
こんにちは! Killでファイルを削除すると、ゴミ箱に入らずに削除されてしまいます ゴミ箱に入れたいのですが、どうすればいいですか? kill ファイルのパス
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1さんの示していただいたサイトを参考にサブルーチン化して利用すれば簡単。 新規のモジュールを追加して下記をコピペ --------この下から-------- ''ごみ箱に送るためのAPI Private Declare Function SHFileOperation Lib "shell32.dll" _ (lpFileOp As SHFILEOPSTRUCT) As Long ''SHFileOperation関数に渡すユーザー定義型 Private Type SHFILEOPSTRUCT hwnd As Long ''ウィンドウハンドル 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_NOCONFIRMATION = &H10 '確認なし Private Const FOF_ALLOWUNDO = &H40 ''ごみ箱に送る Sub DeleteFile(Target As String) Dim SH As SHFILEOPSTRUCT, re As Long With SH .wFunc = FO_DELETE .pFrom = Target .fFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION End With re = SHFileOperation(SH) If re <> 0 Then MsgBox "削除に失敗しました", vbExclamation End Sub --------この上まで-------- 使うときは DeleteFile ファイル名 の一行で、ごみ箱に送れます。 削除前に確認が必要なら .fFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION を .fFlags = FOF_ALLOWUNDO に変更してください。
その他の回答 (3)
- papayuka
- ベストアンサー率45% (1388/3066)
#1です。 > 思っていたよりはるかに難しそうです > あつかましいようですが、数行ですむ方法はないでしょうか? 難しく考える必要はありません。 既に #2さんがサブルーチンの例を挙げてますので、#2さんの「この下から」「この上まで」の間のコードを標準モジュールの一番上にコピペしておきます。 その上でこれまで Kill を使っていた部分を DeleteFile に置き換えれば良いだけだと思います。 '標準モジュール 'この下から ''ごみ箱に送るためのAPI ・ ・ ・ 'この上まで Sub 今までのコード() ' kill "削除したいファイルのフルパス" DeleteFile "削除したいファイルのフルパス" End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >Killでファイルを削除すると、ゴミ箱に入らずに削除されてしまいます 最初に、完全削除に迷うものは、マクロで削除するというのは、VBAのコードのコンセプトとして、上手くありません。 Rename(VBAでは、Name) して、ファイル名の前に、$ をつけておくか、バックアップフォルダを作っておいて、COPY で、そちらに送って、その後で、KILLで削除すればよいのではありませんか? 私は、いつもは、ファイル名に $ をつけています。それが溜まった時点で消せばよいです。もちろん、フリーソフトウェアの「窓の手」などで一括削除も出来ます。
- papayuka
- ベストアンサー率45% (1388/3066)
補足
回答ありがとうございます! URLからサイトを見ましたが・・・思っていたよりはるかに難しそうです あつかましいようですが、数行ですむ方法はないでしょうか?