2017-10-20 226 views
0

我正在回收旧数据库中的代码。如何在通过网络复制文件时处理错误

对于一个人,位于全国各地的一半,我相信可能有一些连接问题。

Public Function BackUpBackend() 

    Dim Source As String 
    Dim Target As String 
    Dim retval As Integer 

    Source = "\\network\backend\accessfile.accdb" 

    Target = "\\network\backend\backup\" 
    Target = Target & Format(Date, "mm-dd") & "@" 
    Target = Target & Format(Time, "hh-mm") & ".accdb" 

    retval = 0 
    Dim objFSO As Object 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    retval = objFSO.CopyFile(Source, Target, True) 
    Set objFSO = Nothing 

End Function 

有没有什么办法可以检测这段代码中的连接错误?如果有,连接是否可以重新建立,或只是在问题出现时一起停止备份过程?

+0

如果远程工作站具有共享驱动器再复制一个大f然后读回共享驱动器。检查文件传输的速度,并检查在往返之后是否有损坏...然后在远程工作站上使用accessfile.accdb在工作站上运行代码...可能会显示一些内容 – jsotola

回答

2

在VBA中,你可以做

On Error Resume Next 

将继续过去的错误。这可能是危险的,所以它往往是最好尽快在发生错误时处理转换尽可能与

On Error Goto 0 

您可以自定义处理程序的错误,茬了,你要采取具体行动: 从VBA Reference

Sub InitializeMatrix(Var1, Var2, Var3, Var4) 
    On Error GoTo ErrorHandler 
    . . . 
    Exit Sub 
ErrorHandler: 
    . . . 
    Resume Next 
End Sub 

所以,你可能做这样的事情:(我没有测试)

Public Function BackUpBackend() 

    Dim Source As String 
    Dim Target As String 
    Dim retval As Integer 


    Source = "\\network\backend\accessfile.accdb" 

    Target = "\\network\backend\backup\" 
    Target = Target & Format(Date, "mm-dd") & "@" 
    Target = Target & Format(Time, "hh-mm") & ".accdb" 

    retval = 0 
    Dim objFSO As Object 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 

    On Error Goto ErrorHandler 
    retval = objFSO.CopyFile(Source, Target, True) 
    Set objFSO = Nothing 
    On Error Goto 0 

    Exit Function 

ErrorHandler: 
    MsgBox("Backup failed. If this happens often contact IT", vbExclamation) 

End Function 
+0

这很棒,我将确认这一点在星期一她回来时有效,因为我现在没有办法复制它。感谢你的帮助!我仍然在努力掌握目前的“错误处理” – Maldred

+0

不客气。做一些关于错误和异常处理的一般性阅读可能会有所帮助。你也可以故意通过放入一个不好的目标路径来检查你的代码 – Spangen

+0

我想我可以做到这一点,但这会不同于连接损失不是吗? – Maldred