当 运行 VBA 脚本在宏中创建目录或作为子脚本时,MS Access 抛出错误 2001

MS Access throwing error 2001 when running VBA script to make a directory in a Macro or as sub script

我在 MS Access 中有以下 VBA 脚本来检查目录并在目录不存在时创建它:

Public Function MakeReportDirct()

Dim fDate As String
Dim sFolderPath As String
Dim oFSO As Object


fDate = Format(Now(), "YYYY-MM")
sFolderPath = "\satco-file01\COMPANYSHAREDFOLDERS\Reporting\Nuvo\Daily Reports\" & fDate

Set oFSO = CreateObject("Scripting.FileSystemObject")

If oFSO.FolderExists(sFolderPath) Then
End

End If

MkDir sFolderPath

End Function

当我 运行 代码单独在 VBA window 时,它工作得很好。但是,当我尝试 运行 来自宏的代码或当我尝试从另一个 VBA 脚本调用时:

Public Function ChartwellVendor()

Call MakeReportDirct
Call ChartwellVendorExport
Call ChartwellVendorEmail


End Function

它给出了“宏单步”错误:2001

我已将我能想到的每个位置(数据库位置、导出位置、将创建目录的位置)启用为“受信任的位置”。

如有任何帮助,我们将不胜感激!

End statement"立即终止执行".

当你 运行 MakeReportDirct 一个人时,这就完成了你想要的:当文件夹已经存在时 MkDir 不会执行。

但是当您从 ChartwellVendor 中 运行 它时,您希望其他程序在 MakeReportDirct 之后 运行。但是,End 语句终止了 all 的进一步处理,因此那些其他过程不会 运行.

您可以通过将 End 替换为 Exit Function 来避免该问题。然后 MakeReportDirct 可以终止但仍然允许处理继续 ChartwellVendor

中的下一行

另一种方法是翻转 If 块条件的逻辑。如果该文件夹不存在,则在该代码块内 运行 MkDir

If Not oFSO.FolderExists(sFolderPath) Then
    MkDir sFolderPath
End If