アニメ付きファイル操作


Windowsでは、ファイルのコピーや移動のときに下図のようなアニメーションが表示されます。

マクロでファイルを操作するときにこのダイアログボックスを表示するには、APIを使います。次のコードを標準モジュールに記述してください。

Public Declare Function SHFileOperation Lib "shell32.dll" _
                            (lpFileOp As SHFILEOPSTRUCT) As Long
Public 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
Const FO_MOVE As Long = &H1           ''移動
Const FO_COPY As Long = &H2           ''コピー
Const FO_DELETE As Long = &H3         ''削除
Const FO_RENAME As Long = &H4         ''リネーム
Sub Sample()
    Dim Ret As Long, SH As SHFILEOPSTRUCT
    With SH
         .hwnd = Application.hwnd
         .wFunc = FO_MOVE
         .pFrom = "C:\Big.wmv"
         .pTo = "E:\"
    End With
    Ret = SHFileOperation(SH)
End Sub

上記のサンプルは、C:\Big.wmvをE:\に移動します。移動に十分な時間を要する大きなファイルでないと、ダイアログボックスが一瞬で消えてしまいますので注意してください。最近のパソコンは高性能ですから、ファイルの移動やコピーも高速なんですよね。

今回使用するAPI「SHFileOperation」は、アニメーション付きでファイルの「コピー」「移動」「削除」「リネーム」を行います。引数に指定するのは、SHFILEOPSTRUCT型の構造体(ユーザー定義型変数)です。構造体のそれぞれの項目に、設定する値を指定します。

wFuncは「コピー」や「移動」など実行する操作を指定します。ふつうは上記のように定数を宣言しておいて、操作に合わせてその定数を指定します。上記のサンプルでは「FO_MOVE」ですからファイルの移動です。

操作と対象ファイルとの関係は次の通りです。

  • 「コピー」(FO_COPY)…pFromをpToにコピーします
  • 「移動」(FO_MOVE)…pFromをpToに移動します
  • 「削除」(FO_DELETE)…pFromを削除します
  • 「リネーム」(FO_RENAME)…pFromをpToにリネームします

pFromにはワイルドカードを指定できます。