2016-01-03 37 views
0

我想實現的是使用Save函數將Word文檔保存在兩個位置。但它有兩個缺點。首先,當我保存一個文件時,Word閃爍(因爲它關閉保存一個副本,並且它變爲活動文檔,關閉該文檔,然後Word返回到原始文檔)。其次,宏將我的備份添加到最近的文件,儘管AddToRecentFiles:=False如何避免兩個故障?VBA:將Word文檔保存到兩個位置

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" 

末次

+0

閱讀和理解的代碼將是一個良好的開端,也許?嚴重的是,你將代碼從互聯網上覆制下來並運行(!),而沒有絲毫的線索,它是如何做到的呢?這是非常不明智的。 – Tomalak

+0

首先,您應該刪除錯誤結果下一行,因爲這將隱藏任何錯誤 - 並且知道產生了哪些錯誤可能很重要! –

+0

@Cindy這些是十八行非常明顯的代碼,至少對於那些花幾分鐘時間試圖理解它們的人來說。 OP顯然沒有做出這樣的嘗試。解釋這段代碼的做法是徒勞無益的。 – Tomalak

回答

1

此代碼檢查該文件是否有需要保存更改。如果沒有,則進行備份。否則,如果文檔具有文件路徑(之前已保存),則保存文檔並重新啓動代碼,然後進行備份。否則,將顯示另存爲對話框,以便將文檔保存到路徑中,然後進行備份。

棘手的部分是,宏應該如何區分「我只打開並查看它」與「文檔已保存,現在做備份」。

一種可能性是,以檢查文檔變量或文檔屬性的存在,通過保存操作設置並去除另存爲。試試這個:

  1. 文件/信息;從「屬性」下拉列表中選擇「高級屬性」。
  2. 創建一個名爲MakeBackup自定義屬性爲「是/否」類型,並將其設置爲No.
  3. 行後.Save:ActiveDocument.CustomDocumentProperties("MakeBackup").Value = True
  4. 添加一個檢查到如果要檢查備份這是否是真:If .Saved And ActiveDocument.CustomDocumentProperties("MakeBackup").Value = True Then
  5. 而SaveAs2行後改回爲false:ActiveDocument.CustomDocumentProperties("MakeBackup").Value = False
+0

不創建複製/粘貼片段是一個明智之舉。 :) – Tomalak

+0

感謝您的建議,並對我遲到的回覆感到抱歉。我生病了,無法在電腦上工作。我已在第一篇文章中更新了代碼,並且完成了您建議的第一點。現在,當我關閉Word時,它希望我保存文檔的副本。很奇怪,因爲.SaveAs2應該自動執行此操作。有什麼建議麼? – menteith

+0

請更明確地說明「...它想保存我的文檔的副本。」究竟發生了什麼,你不期望/想要?這是一個新的文檔還是現有的已經有文件路徑的文檔?並且文件路徑是否包含正斜槓(/),如ElseIf中所述?您也可以嘗試設置一個斷點並逐步瀏覽代碼,以瞭解它在哪些情況下遵循的邏輯。 –

相關問題