【问题标题】:VBA: save a Word doc to two placesVBA:将 Word 文档保存到两个位置
【发布时间】:2020-07-06 23:55:00
【问题描述】:

我想要实现的是使用Save 函数将Word 文档保存在两个地方。不过,它有两个缺点。首先,我保存文件时Word会闪烁(因为它关闭保存了一个副本,它变成了活动文档,它被关闭了,然后Word返回到原始文档)。二、宏把我的备份添加到最近的文件中,尽管AddToRecentFiles:=False如何避免两个故障?

Sub FileSave()
Dim currFile As String
Dim backup As String
backup = "C:\Users\" & Environ("UserName") & "\Documents\WordBackups\"
With ActiveDocument
If .Saved Or .Path = "" Then Exit Sub
If Dir(backup, vbDirectory) = "" Then
    MkDir backup
    MsgBox "Backup folder has been created.", vbInformation
End If

    .Bookmarks.Add Name:="LastPosition"
    Application.ScreenUpdating = False
    .Save
    currFile = .FullName
    .SaveAs2 FileName:=backup & .Name, AddToRecentFiles:=False

End With

    ActiveDocument.Close
    Documents.Open FileName:=currFile
    Selection.GoTo What:=wdGoToBookmark, Name:="LastPosition"

结束子

【问题讨论】:

  • 阅读和理解代码将是一个好的开始,也许吧?说真的,您从 Internet 上复制代码并运行它(!),却丝毫不知道它是如何工作的?这是非常……不明智的。
  • 首先,您应该删除 On Error Result Next 行,因为这将隐藏所有错误 - 了解生成的错误可能很重要!
  • @Cindy 这些是 18 行非常明显的代码,至少对于任何花几分钟时间试图理解它们的人来说。 OP显然没有做出这样的尝试。解释这段代码在做什么是徒劳的。
  • 是的,我确实想到了这个想法。 OTOH,这应该是问答,这意味着解释可以帮助其他人,稍后再说。所以我妥协并提供了“家庭作业”,而不是在我的答案中给出更正的代码...... :-)
  • @Tomalak 如果想要评论某人的帖子,仔细阅读总是一个好的开始。如果你这样做了,你就会知道我写了“宏在 Word 关闭时保存当前文档”(!)。我不知道您如何得出我确实阅读过也没有尝试过理解代码的结论。

标签: vba ms-word


【解决方案1】:

此代码检查文档是否有需要保存的更改。如果没有,则进行备份。否则,如果文档有文件路径(之前已保存),则保存文档并重新启动代码,则将进行备份。否则,将显示“另存为”对话框,以便将文档保存到路径,然后进行备份。

棘手的部分是宏应该如何区分“我只是打开并查看了它”与“文档已保存,现在进行备份”。

一种可能性是检查文档变量或文档属性是否存在,由 Save 操作设置并由 SaveAs 删除。试试这个:

  1. 文件/信息;从“属性”下拉菜单中选择“高级属性”。
  2. 创建一个名为 MakeBackup 的自定义属性作为“是/否”类型并将其设置为否。
  3. 行后.保存:ActiveDocument.CustomDocumentProperties("MakeBackup").Value = True
  4. 为备份的 If 添加检查以检查这是否为真:If .Saved And ActiveDocument.CustomDocumentProperties("MakeBackup").Value = True Then
  5. 在 SaveAs2 行之后将其改回 false:ActiveDocument.CustomDocumentProperties("MakeBackup").Value = False

【讨论】:

  • 不创建复制/粘贴 sn-p 是明智之举。 :)
  • 感谢您的建议,对我迟到的回复感到抱歉。我病了,不能在我的电脑上工作。我在第一篇文章中更新了代码,我做了你建议的第一点。现在,当我关闭 Word 时,它希望我保存我的文档副本。很奇怪,因为 .SaveAs2 应该自动执行此操作。有什么建议吗?
  • 请更明确地说明“...它想保存我的文档的副本。”究竟发生了什么,你不期望/不想要?这是新文档还是已有文件路径的现有文档?并且文件路径是否包含正斜杠 (/),如 ElseIf 中指定的那样?您还可以尝试设置断点并单步执行代码以查看在什么情况下它遵循的逻辑。
  • @CindyMeister 请给我一两天重写这段代码。我现在认为最好在保存文档时进行备份。据我所知,最好避免您建议的第一点。我可能是错的,但是这样宏就可以工作,无论文档是否包含名为 MakeBackup 的属性或基于包含此属性的模板(例如 normal.dot)。
  • 是的,如果您改变方法以便在每次有存档时进行备份,您就不需要“跳槽”了。
猜你喜欢
  • 2019-02-20
  • 2019-04-30
  • 2017-01-02
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多