即効テクニック

ファイル操作関連のテクニック

ごみ箱に削除する

(Excel 97/2000/2002/2003/2007)
ファイルを削除するには、いくつかの方法があります。
たとえばVBAの標準機能であるKillステートメントは、指定したファイルを削除します。
次のコードはC:\Sample.txtを削除します。

Sub Sample1()
  Kill "C:\Sample.txt"
End Sub   
また、FileSystemObjectを使ってファイルを削除することもできます。 FileSystemObjectのDeleteFileメソッドは、引数に指定したファイルを削除します。
Sub Sample2()
  With CreateObject("Scripting.FileSystemObject")
    .DeleteFile "C:\Sample.txt"
  End With
End Sub   
どちらの方法も、削除したファイルはごみ箱には移動せず完全に削除されます。 これはこれで便利なこともありますが、ときには、後で元に戻せるようにWindowsのごみ箱へ移動したいケースもあるでしょう。 ファイル(またはフォルダ)をごみ箱へ移動するには、SHFileOperationというWindows APIを使います。 SHFileOperationは、Windowsが標準で行うコピーや移動などのファイル操作を呼び出すAPIです。 「ファイルを移動しています」などのメッセージと共に、ファイルが移動しているアニメーションを表示するにも、このSHFileOperationを使います。 ファイルをごみ箱に移動するには、次のようにします。 次のコードはダイアログボックスで選択したファイルをごみ箱に移動します。
''ごみ箱に送るための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_ALLOWUNDO = &H40    ''ごみ箱に送る

Sub Sample3()
  Dim SH As SHFILEOPSTRUCT, re As Long, Target As String
  Target = Application.GetOpenFilename _
            (Title:="削除するファイルを選択してください")
  If Target = "False" Then Exit Sub
  With SH
    .hwnd = Application.hwnd
    .wFunc = FO_DELETE
    .pFrom = Target
    .fFlags = FOF_ALLOWUNDO
  End With
  re = SHFileOperation(SH)
  If re <> 0 Then MsgBox "削除に失敗しました", vbExclamation
End Sub   
削除するファイルは、GetOpenFilenameメソッドで選択してもらっています。 ボタンが[開く]ですが、そこは許してもらいましょう。 選択した削除対象のファイルを、APIで定められたユーザー定義型(構造体)にセットして、APIを呼び出します。 画面には、お馴染みの「ファイルがごみ箱に飛んでいく」アニメーションが表示されます。 削除が完了するとAPIは0を返します。 返り値が0でなかったときは、何らかの理由で削除に失敗したことを表します。