我使用VBA创建Excel文档的副本(Excel和PDF)。
我保存在OneDrive文件夹中(C:\Users\XXX\OneDrive),以便以后可以从每个设备访问文档。我使用此文件夹,以便在连接到或不连接到internet时保存。
当我连接到互联网和OneDrive时,一切都正常。
当我没有上网的时候
错误1004方法保存对象_workbook失败
宏停止,但当我转到文件夹时,文件就在那里。
我从以下几个方面得知错误:
ActiveWorkbook.SaveAs Filename:=Fname, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
(Fname="C:\Users\XXX\OneDrive\YYY\ZZZ.xlsm"
)
我找不到任何与这个功能相关的东西,没有在OneDrive上工作,而没有连接到互联网上。
发布于 2020-07-07 01:23:21
如果您的文件在OneDrive中,我将首先确保禁用AutoSave功能。我以前也有过一些bug,所以可能会有帮助。
我不知道您正在经历这个特定的错误,但是由于您是说即使触发了错误,文件实际上也被正确保存了,所以有一种方法可以忽略该错误并检查该文件是否实际被保存。它看起来有点像这样:
Const RETRY_LIMIT = 2
Dim DoesFileExist As Boolean
dim RetryCounter as Integer
Do While RetryCounter < RETRY_LIMIT And DoesFileExist = False
On Error Resume Next
ActiveWorkbook.SaveAs Filename:=Fname, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
On Error GoTo 0
DoesFileExist = FileExists(Fname)
RetryCounter = RetryCounter + 1
Loop
If DoesFileExist = False Then
MsgBox "Error: File couldn't be saved."
Exit Sub
End If
注意,我增加了2的重试限制,以确保我们不会进入无限循环。
还要确保在您正在处理的模块中添加以下函数,以确保上面的代码工作正常。
Function FileExists(ByVal FullFileName As String) As Boolean
If Dir(FullFileName) <> vbNullString Then FileExists = True
End Function
一些解释和注意事项
如果您从未使用过错误处理语句,如:
On Error Resume Next
或On Error GoTo 0
,我强烈建议您看看C.Pearson的VBA中的错误处理文章。
总之,On Error Resume Next
所做的就是忽略错误,让代码来处理错误。在我们的例子中,DoesFileExist
做的工作是确保代码没有错误地运行,循环后的if语句将确保如果所有保存文件的暂定代码都失败了,将确保停止该代码。这就完成了任务,但是您也可以检查Err.Number
来处理不同类型的错误。
对于On Error GoTo 0
,简单地说,它将VBA错误处理重置为其正常状态,其中任何错误都将启动通常的运行时错误对话框。
发布于 2020-07-11 08:46:20
最后,我将文件保存在桌面上,然后使用FileSystemObject移动该文件。它可以正常工作,但如果我试图立即打开文件(使用VBA或直接在中),则会得到一个网络错误。如果我等1分钟,我就不会再犯那个错误了。所以我决定暂时接受它。
以下是一个例子:
Dim FSO as Object
Set FSO = CreateObject("Scripting.Filesystemobject")
FSO.MoveFile("SourceFileName", "TargetFileName")
非常感谢你的帮助
https://stackoverflow.com/questions/62727700
复制相似问题