【发布时间】:2021-07-24 21:07:02
【问题描述】:
我已经编写了一个带有几个 if 语句的递归脚本,以使用 FSO 将所有文件/文件夹附加到 vba 中,但这需要很长时间,我正在寻找其他方法或更快的附加文件的方法。使用 DIR 或 Call shell 是否更快?任何推理将不胜感激。
Option Explicit
Sub BackUpEverything()
Dim Sourcefolder As String
Const DestinationFolder As String = "C:\Users\Person1\FolderX"
Dim i As Long
Dim copyfolders(3) As String
copyfolders(0) = "C:\Users\FolderA"
copyfolders(1) = "C:\Users\FolderB"
copyfolders(2) = "C:\Users\FolderC"
copyfolders(3) = "C:\Users\FolderD"
For i = 0 To 3
Sourcefolder = copyfolders(i)
backupfiles Sourcefolder, DestinationFolder
Next i
Mgsbox "Done"
End Sub
Sub backupfiles(Sourcefolder As String, DestinationFolder As String)
Dim FSO As filesystemobject
Dim oFile As File
Dim oFolder As Folder
Set FSO = New filesystemobject
If Not FSO.folderexists(DestinationFolder) Then FSO.Createfolder DestinationFolder
On Error Resume Next
For Each oFile In FSO.Getfolder(Sourcefolder).Files
If FSO.getextensionname(oFile.Path) <> "pdf" Then
FSO.copyfile oFile.Path, DestinationFolder & " \ " & oFile.Name
Else
End If
Next oFile
On Error Resume Next
For Each oFolder In FSO.Getfolder(Sourcefolder).SUbfolders
backupfiles oFolder.Path, DestinationFolder & " \ " & oFolder.Name
Next oFolder
End Sub
【问题讨论】:
-
如果您需要代码方面的帮助,您需要向我们展示您的代码。
-
您发布的代码有几个问题,包括非法字符、未定义的变量以及谁知道还有什么问题。我建议你 (1) 将 Option Explicit 放在模块的顶部,从菜单中选择 Debug / Compile VBA Project,并继续修复错误,直到没有更多错误为止。 (2) 从代码中删除两个On Error Resume Next 语句。 (3) 运行宏,让我知道会发生什么。我可能可以帮助您解决任何剩余的问题。
-
@NicholasHunter 什么非法字符?
On Error Resume Next的原因是因为我有未知的文件夹/文件给了我权限被拒绝错误。这是唯一的原因,但我还没有找到更好的方法来避免这些问题。 -
如果您将上面发布的代码粘贴到 VBA 模块中,您会很快发现语法错误——非法字符、未闭合的引号等。您可以通过将 Option Explicit 放在模块顶部并从菜单中选择 Debug / Compile VBA Project 来识别未定义的变量。 On Error Resume Next 语句意味着您将忽略该语句后面所有代码中的所有错误。即使那是你想做的,你也只需要做一次。如果您想忽略特定行中的特定错误,有更好的方法来做到这一点。
-
哦,好吧,我明白了。我认为这些主要是我在这里复制/重新格式化时的拼写错误。当我运行它时它不会显示错误..不确定那是否有任何不同。我在这里的脚本中修复了一个或 2 个。更重要的是,如果您收到错误 70 权限被拒绝,您如何跳过文件夹或文件?
标签: vba shell directory copy fso