AccessのVBAでファイルコピーを行わせる


Accessバージョン:2003

WindowsAPIのFileCopyOperationを使用します。

【例:自分自身のmdbをコピー】
Declare Function FileCopyOperation Lib "shell32.dll" Alias _
"SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Type SHFILEOPSTRUCT
 hwnd As Long
 wFunc As Long
 pFrom As String
 pTo As String
 fFlags As Integer
 fAnyOperationsAborted As Boolean
 hNameMappings As Long
 lpszProgressTitle As String
End Type
Public Const FO_DELETE = &H3
Public Const FOF_ALLOWUNDO = &H40
Public Const FOF_NOCONFIRMATION = &H10
Public Const FO_COPY = &H2

Function Backup_Db(frm As Form)
 Dim DBname As String ←コピー先ファイル名
 Dim F As SHFILEOPSTRUCT
 Dim rtn As Long ←戻り値
 Dim MyDb As Database ←自分のmdb参照用オブジェクト
 Dim yn As Integer

 Application.Screen.MousePointer = 11

 Set MyDb = CurrentDb

 DBname = コピー先ファイル名

 If DBname = "" Then
  Application.Screen.MousePointer = 0
  Exit Function
 End If

 If MsgBox("コピーを開始します。準備ができたら[OK]を押してください。", vbOKCancel) = vbOK Then

  If Dir(DBname) <> "" Then
   yn = MsgBox("ファイル " & DBname & " は存在しますが、上書きしますか?", vbYesNo)
   If yn = vbYes Then
    F.hwnd = frm.hwnd
    F.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION
    F.wFunc = FO_COPY
    F.pFrom = MyDb.name
    F.pTo = DBname

    rtn = FileCopyOperation(F)

    Set MyDb = Nothing

    MsgBox "バックアップが終了しました。", vbOKOnly
   Else
    MsgBox "バックアップはキャンセルされました。", vbOKOnly

   End If
  Else
   F.hwnd = frm.hwnd
   F.fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION
   F.wFunc = FO_COPY
   F.pFrom = MyDb.name
   F.pTo = DBname

   rtn = FileCopyOperation(F)

   Set MyDb = Nothing

   MsgBox "コピーが終了しました。", vbOKOnly
  End If
  Application.Screen.MousePointer = 0
 Else
  Application.Screen.MousePointer = 0
  MsgBox "コピーはキャンセルされました。", vbOKOnly
 End If

 Exit Function
Err_Rtn:
 Application.Screen.MousePointer = 0
 Set MyDb = Nothing

End Function


お名前
コメント
最終更新:2008年03月11日 01:24