#112 | エクスプローラ風のファイルコピー | VBA、API | |
AccessのVBAには、ファイルをコピーする手段として「FileCopyステートメント」が用意されています。しかし、WindowsAPIを使うと、エクスプローラでファイルのコピーを実行したときと同じように、紙がフォルダからフォルダへとヒラヒラ飛んでいく、あのダイアログを表示させながらファイルのコピーを実行させることができます。 それには"SHELL32.DLL"にあるWindowsAPIの「SHFileOperation」関数を使用します。 まず標準モジュールに次のコードを記述します。"Type"および"Declare"の前に、"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 Declare Function SHFileOperation Lib "SHELL32.DLL" Alias _ "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long Const FO_COPY = &H2 Const FO_MOVE = &H1 Const FOF_NOCONFIRMATION = &H10 Const FOF_RENAMEONCOLLISION = &H8 次の例では、ファイル"c:\My Documents\Test.mdb"を"c:\Test.mdb"にコピーします。 Dim stShellOp As SHFILEOPSTRUCT
Const cstrSrcFile As String = "c:\My Documents\Test.mdb" Const cstrDstFile As String = "c:\Test.mdb" With stShellOp 'Accessのハンドルをセット .hwnd = Application.hWndAccessApp 'コピーモードを指定 .wFunc = FO_COPY '移動時は FO_MOVE 'コピー元ファイルのフルパスをセット .pFrom = cstrSrcFile 'コピー先ファイルのフルパスをセット .pTo = cstrDstFile '.fFlags = FOF_NOCONFIRMATION '.fFlags = FOF_RENAMEONCOLLISION End With 'コピーを実行 If SHFileOperation(stShellOp) = 0 Then Beep MsgBox "コピー完了しました!" Else Beep MsgBox "コピーに失敗またはキャンセルされました!" End If
|
|||
|
Copyright © T'sWare All rights reserved |