VBA:将Word文档保存到两个位置

时间:2016-01-03 01:55:58

标签: ms-word word-vba

我想要实现的是使用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"

End Sub

1 个答案:

答案 0 :(得分:1)

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

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

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

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