首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在离线时使用OneDrive保存?

如何在离线时使用OneDrive保存?
EN

Stack Overflow用户
提问于 2020-07-04 09:56:14
回答 2查看 931关注 0票数 1

我使用VBA创建Excel文档的副本(Excel和PDF)。

我保存在OneDrive文件夹中(C:\Users\XXX\OneDrive),以便以后可以从每个设备访问文档。我使用此文件夹,以便在连接到或不连接到internet时保存。

当我连接到互联网和OneDrive时,一切都正常。

当我没有上网的时候

错误1004方法保存对象_workbook失败

宏停止,但当我转到文件夹时,文件就在那里。

我从以下几个方面得知错误:

代码语言:javascript
运行
复制
ActiveWorkbook.SaveAs Filename:=Fname, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

(Fname="C:\Users\XXX\OneDrive\YYY\ZZZ.xlsm")

我找不到任何与这个功能相关的东西,没有在OneDrive上工作,而没有连接到互联网上。

EN

回答 2

Stack Overflow用户

发布于 2020-07-07 01:23:21

如果您的文件在OneDrive中,我将首先确保禁用AutoSave功能。我以前也有过一些bug,所以可能会有帮助。

我不知道您正在经历这个特定的错误,但是由于您是说即使触发了错误,文件实际上也被正确保存了,所以有一种方法可以忽略该错误并检查该文件是否实际被保存。它看起来有点像这样:

代码语言:javascript
运行
复制
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的重试限制,以确保我们不会进入无限循环。

还要确保在您正在处理的模块中添加以下函数,以确保上面的代码工作正常。

代码语言:javascript
运行
复制
Function FileExists(ByVal FullFileName As String) As Boolean
    If Dir(FullFileName) <> vbNullString Then FileExists = True
End Function

一些解释和注意事项

如果您从未使用过错误处理语句,如:

On Error Resume NextOn Error GoTo 0,我强烈建议您看看C.Pearson的VBA中的错误处理文章。

总之,On Error Resume Next所做的就是忽略错误,让代码来处理错误。在我们的例子中,DoesFileExist做的工作是确保代码没有错误地运行,循环后的if语句将确保如果所有保存文件的暂定代码都失败了,将确保停止该代码。这就完成了任务,但是您也可以检查Err.Number来处理不同类型的错误。

对于On Error GoTo 0,简单地说,它将VBA错误处理重置为其正常状态,其中任何错误都将启动通常的运行时错误对话框。

票数 0
EN

Stack Overflow用户

发布于 2020-07-11 08:46:20

最后,我将文件保存在桌面上,然后使用FileSystemObject移动该文件。它可以正常工作,但如果我试图立即打开文件(使用VBA或直接在中),则会得到一个网络错误。如果我等1分钟,我就不会再犯那个错误了。所以我决定暂时接受它。

以下是一个例子:

代码语言:javascript
运行
复制
Dim FSO as Object
Set FSO = CreateObject("Scripting.Filesystemobject")
FSO.MoveFile("SourceFileName", "TargetFileName")

非常感谢你的帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62727700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档