FileSystemObject代码已经开始抛出一个错误
不知道为什么,但下面的代码已经开始抛出一个未知的错误。 macros运行时Excel停止响应。
- 为什么这个错误发生?
- 什么是具有相同function的替代路线?
此代码位于Windows 7计算机上的Excel 2010 xlsm文件中。
Sub CopyFolderToCasinoDirectory() 'reference Microsoft Scripting Runtime On Error Resume Next Dim fso As Scripting.FileSystemObject Set fso = New Scripting.FileSystemObject fso.CopyFolder _ "\\xxxfileserve\department$\DBA\Opers\All Operators\yyy", _ "\\xxxfileserve\department$\DBA\Cas\yyy", _ True On Error GoTo 0 Set fso = Nothing End Sub
好吧 – 我已经改变了path,试图移动更less的文件 – 它犹豫了,但最终还是贯穿始终。 我怀疑以上是失败的,因为在指定的目录中有太多的文件? 目前有753个文件 – 可能太多了?
RonDeBruin给了我很多关于如何testing或改变逻辑的想法。 一种可能性可能是先在目标文件夹上使用DeleteFolder,然后CopyFolder将目标文件夹复制过来?
对不起,这么晚回复。 我无法获得networking目录,我想在发布之前testing代码:)
尝试这个。 运行Sub Sample()
它仍然挂起? 您还将在Windows对话框中看到正在传输的文件。
Private Declare Function SHFileOperation _ Lib "shell32.dll" Alias "SHFileOperationA" _ (lpFileOp As SHFILEOPSTRUCT) As Long Private Type SHFILEOPSTRUCT hWnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAborted As Boolean hNameMaps As Long sProgress As String End Type Private Const FO_COPY = &H2 Sub Sample() Dim path1 As String, path2 As String path1 = "\\xxxfileserve\department$\DBA\Opers\All Operators\yyy" path2 = "\\xxxfileserve\department$\DBA\Opers\All Operators\yyy" If CopyFolder(path1, path2) Then MsgBox "Copied" Else MsgBox "Not copied" End If End Sub Private Function CopyFolder(ByVal sFrom As String, _ ByVal sTo As String) As Boolean Dim SHFileOp As SHFILEOPSTRUCT On Error GoTo Whoa CopyFolder = False With SHFileOp .wFunc = FO_COPY .pFrom = sFrom .pTo = sTo End With SHFileOperation SHFileOp CopyFolder = True Exit Function Whoa: MsgBox "Following error occurred while copying folder " & sFrom & vbCrLf & _ Err.Description, vbExclamation, "Error message" End Function
有一些关于fso.CopyFolder
方法的fso.CopyFolder
:
- 如果目标不存在,则复制源文件夹及其所有内容。 这是通常的情况。
- 如果目标是现有文件,则会发生错误。
- 如果目的地是目录,则尝试复制文件夹及其所有内容。
- 如果源中包含的文件已经存在于目标中,则覆盖为False时发生错误。 否则,它将尝试将文件复制到现有文件中。
- 如果目标是只读目录,如果尝试将现有的只读文件复制到该目录并覆盖为False,则会发生错误。
确保没有任何这些成为你的潜在障碍。
但是像这样testing另一种方式
fso.CopyFolder _ "\\xxxfileserve\department$\DBA\Opers\All Operators\yyy\*", _ "\\xxxfileserve\department$\DBA\Cas\yyy", _ True
希望这可以帮助。