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