2015-12-22 50 views
-1

我有兩個工作簿,一個共享的「xlsx」文件A,它存儲數據並且不共享包含我的宏的「xlsm」文件B.我想保持定期跟蹤文件A和密碼的更改 - 保護此更改歷史記錄。我知道文件A中有「跟蹤更改」功能,它可以創建一個包含更改歷史記錄的單獨工作表。但是,此工作表位於正在共享的工作簿A中。有沒有辦法在B中編寫一個宏來定期從A中提取這個更改歷史記錄,並將它放入帶有密碼的「xlsx」文件C中?定期將共享工作簿的更改存儲到單獨的工作簿中

這裏的一點是我想阻止變更歷史被破壞。只有我有權訪問它。請注意,我無法創建文件「啓用宏」並在其中寫入宏。

謝謝。

+0

你能隱藏工作表跟蹤的變化,所以沒人知道它存在嗎?如果這不是一個有效的行爲,那麼只需將該表的內容複製到另一個工作簿就不會太難。 – NinjaLlama

+0

謝謝,NinjaLlama。使用文件A的人需要激活「跟蹤更改」功能。當該人保存並關閉文件A時,包含更改歷史記錄的此表也會消失(儘管如果再次打開文件A並激活「跟蹤更改「,你會得到相同的更改歷史記錄,我的困難在於在B文件中編寫代碼以打開文件A並激活」跟蹤更改「 – user5700405

回答

0

當您打開共享WB,更新變化的信息,然後複製歷史記錄表

Sub Demo() 
    Dim wbShared As Workbook 
    Dim wbHistory As Workbook 

    Set wbHistory = Application.Workbooks.Open(_ 
     Filename:="\\Path\To\Your\History\FileC.xlsx", _ 
     Password:="Password") 

    Set wbShared = Application.Workbooks.Open(_ 
     FileName:="\\Path\To\Your\Shared\FileA.xlsx") 

    ' Generate History Sheet (maybe change xlAllChanges to suit needs) 
    With wbShared 
     .HighlightChangesOptions _ 
      When:=xlAllChanges, _ 
      Who:="Everyone" 
     .ListChangesOnNewSheet = True 
    End With 

    ' Copy out History to FileC 
    wbShared.Worksheets("History").Copy After:=wbHistory.Sheets(wbHistory.Sheets.Count) 

    ' Clean Up 
    wbShared.Close False 
    wbHistory.Close True 
End Sub 
+0

謝謝你,克里斯,回答。我在某段時間後找到了解決方案。非常類似於你的建議! – user5700405

0

使用您的私人工作簿,可以使用宏打開共享工作簿並將工作表再次複製到私人工作簿。

編輯:對不起,我錯過了部分關於它保存到一個文件C.

這裏是讓你開始:

Sub wbCopy() 
    Dim sharedWb, myWb As Workbook 
    Dim sharedWs As Worksheet 

    Set myWb = New Workbook 

    Workbooks.Open Filename:="192.168.0.10\sharedWorkbook.xls", ReadOnly:=True 
    Set sharedWb = "sharedWorkbook.xls" 
    Set sharedWs = sharedWb.Worksheets(2) 

    sharedWs.Copy myWb.Worksheets(Sheets.Count) 

    Workbooks("sharedWorkbook.xls").Close 

    myWb.SaveAs Filename:="File C.xls" 
End Sub 
+0

謝謝Vegard。與我對NinjaLlama的回覆類似,問題出在」跟蹤更改「功能,它在文件A打開時需要手動激活,一旦文件A被保存,這張包含更改歷史記錄的表就不存在了,所以如果我使用文件B中的代碼打開文件A,我想用代碼從文件B中激活它。 – user5700405

+0

直接回答你的問題已經超出了我可以貢獻的範圍。我的一部分人懷疑是否可以單獨使用「本地」工具。我爲excel寫了一個手動diff工具文件,但是,如果您滿意於比較文件版本的「之前」和「之後」版本,只需使用簡單的VBA即可輕鬆完成。 – Vegard

+0

其實,我不知道爲什麼我認爲你不能把宏放入文件A.你可以把宏放入文件A嗎? – Vegard

相關問題