Note: The other languages of the website are Google-translated. Back to English

如何在不共享工作簿的情況下跟踪更改?

通常,當您在Excel中應用“跟踪更改”功能時,將同時共享工作簿,這將很煩人,因為Excel中的某些功能將被禁用。 您如何在不共享工作簿的情況下跟踪更改? 在這裡,我將為您推薦VBA代碼。

無需與VBA代碼共享工作簿即可跟踪更改


箭頭藍色右氣泡 在Outlook中將文本轉換為表格

沒有直接的方法可以解決此問題,但是,您可以應用靈活的VBA代碼來解決此問題,請執行以下操作:

1。 右鍵單擊要跟踪更改的單元格的工作表選項卡,然後選擇 查看代碼 從上下文菜單中,彈出 Microsoft Visual Basic for Applications 窗口,請複制以下代碼並將其粘貼到空白處 模塊:

VBA代碼:在不共享工作簿的情況下跟踪更改:

Private Sub Worksheet_Change(ByVal Target As Range)
  'Updateby Extendoffice
    Const xRg As String = "A1:Z1000"
    Dim strOld As String
    Dim strNew As String
    Dim strCmt As String
    Dim xLen As Long
    With Target(1)
        If Intersect(.Cells, Range(xRg)) Is Nothing Then Exit Sub
        strNew = .Text
        Application.EnableEvents = False
        Application.Undo
        strOld = .Text
        .Value = strNew
        Application.EnableEvents = True
        strCmt = "Edit: " & Format$(Now, "dd Mmm YYYY hh:nn:ss") & " by " & _
        Application.UserName & Chr(10) & "Previous Text :- " & strOld
        If Target(1).Comment Is Nothing Then
            .AddComment
        Else
            xLen = Len(.Comment.Shape.TextFrame.Characters.Text)
        End If
        With .Comment.Shape.TextFrame
            .AutoSize = True
            .Characters(Start:=xLen + 1).Insert IIf(xLen, vbLf, "") & strCmt
        End With
    End With
End Sub

文檔跟踪更改但未共享1

備註:在上面的代碼中, A1:Z1000 是您要跟踪更改的數據范圍。

2。 然後保存並關閉此代碼窗口,現在,當您在代碼中設置的指定範圍內更改任何單元格中的值時,將跟踪這些單元格,並且不共享工作簿。 看截圖:

文檔跟踪更改但未共享2


最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (14)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
做得好。 不幸的是,您的代碼存在一些問題。 - 它甚至會在單元格的第一個條目上添加評論。 如何讓它跟踪第二個條目而不是第一個條目的更改? - 一旦我在一個單元格中輸入一個值,我就不能做“撤消”。 - 它不適用於表格。 嘗試在表上使用,然後嘗試添加或刪除原始數據,代碼將崩潰。 我真的希望我有知識讓代碼按照我想要的方式工作,如上所述。
網站主持人對此評論進行了最小化
我有同樣的問題。 “撤消”和“重做”按鈕不再起作用。 有什麼解決辦法嗎?
網站主持人對此評論進行了最小化
我嘗試在我的 excel 表中使用這個 VBA 代碼。 但它給了我錯誤。 我不知道應該從哪裡調用這個宏以及調用它時提供的函數的參數是什麼。
網站主持人對此評論進行了最小化
有沒有辦法記錄工作簿中所有選項卡的更改,並將更改記錄到新的電子表格中? 那太棒了......我無法通過這種類型的跟踪過程在互聯網上找到任何信息。
網站主持人對此評論進行了最小化
您好,jfjoyner,要為所有工作表更改此代碼,並將跟踪更改記錄到另一個工作表,請使用以下代碼:
注意:請將此代碼放入 ThisWorkbook 模塊。
Option Explicit
Dim mStrRgAddress As String
Dim mStrRgValue As String

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Const xRg As String = "A1:Z1000"
Const xSheetName As String = "Record sheet" 'The sheet that you want to put the track changes, please change the sheet name to your own.
Dim strOld As String
Dim strNew As String
Dim strCmt As String
Dim xLen As Long
Dim xSheet As Worksheet
Dim xRgCell As Range
Dim xRgCell2 As Range
On Error Resume Next
Set xSheet = Application.Sheets.Item(xSheetName)
If mStrRgAddress <> "" Then
Set xRgCell = Range(mStrRgAddress)
If xRgCell.Text <> mStrRgValue Then
strCmt = mStrRgAddress & " : " & Format$(Now, "dd Mmm YYYY hh:nn:ss") & " by " & _
Application.UserName & Chr(10) & "Previous Text :- " & mStrRgValue
Set xRgCell2 = xSheet.Range("a1048576").End(xlUp)
If xRgCell2.AddressLocal = xSheet.Range("A1").AddressLocal Then
If xRgCell2.Value <> "" Then
Set xRgCell2 = xRgCell2.Offset(1, 0)
End If
Else
Set xRgCell2 = xRgCell2.Offset(1, 0)
End If
xRgCell2.Value = strCmt
End If
End If
If xSheet.Name = Sh.Name Then Exit Sub
mStrRgValue = Target.Text
mStrRgAddress = Target.AddressLocal(False, False, , True)
End Sub
查看附件 (1 / 5)
網站主持人對此評論進行了最小化
謝謝,這很好,但我無法讓它工作。 我假設它會自動運行,這意味著不需要點擊“運行”? 我將工作表重命名為 {--TRACK_CHANGES--} 以按照您留下的綠色說明進行操作。 到目前為止,它沒有記錄任何內容。 謝謝。
網站主持人對此評論進行了最小化
再次感謝 skyyang。我還注意到,當我將其粘貼到 This Workbook 的模塊中時,我的大型電子表格開始連續計算並且不會停止。 我對 VBA 編程一無所知,但我發現這個討論是關於同一主題的。 這或許可以解釋為什麼計算會無休止地進行。 https://www.mrexcel.com/board/threads/continuous-calculation-wont-stop.1179541/page-6#posts 
這個網站上的問題是:但是一旦連續計算問題開始,它就會持續存在。 按 Esc 鍵確實會中斷計算,但除非我切換到手動計算,否則它會重新開始。 手動計算模式工作正常,直到我運行任何宏,然後通過重新啟用 AutoCalc 結束...我已經瀏覽了模型中​​的每個工作表並運行錯誤檢查無濟於事。
他們的結論是:這是真的:一旦您引用表單對像或其屬性(frmBudget.startupposition = 3) - 然後加載該對象,直到您卸載它或重置您的項目(狀態丟失 - 此時所有變量都被重置以及丟失的任何值)
網站主持人對此評論進行了最小化
你好 jfjoyner3,你好嗎。 正如您在兩個屏幕截圖中看到的,我在 VBA 代碼中將“記錄表”更改為“sheet2”。 
然後我回到 Excel 工作簿。 在我對 sheet1 進行了一些更改後,所有這些更改都記錄在 sheet2 中。
關於連續計算的問題,能否把問題的截圖或視頻發給我們? 所以我們可以完全理解這裡發生了什麼。 謝謝! 
真誠的,曼迪
查看附件 (2 / 5)
網站主持人對此評論進行了最小化
非常感謝您!
網站主持人對此評論進行了最小化
您好 jfjoyner3,不客氣。 使用宏 VBA 代碼保存電子表格後,每次打開電子表格時,宏都會自動啟動。 無需手動啟動。 任何問題,請隨時與我們聯繫。 祝你有美好的一天!最好的問候,曼迪   
網站主持人對此評論進行了最小化
MandyZhou,謝謝。 當我打開電子表格時,這個宏會自動啟動嗎? 還是我必須手動啟動它? 
連續計算問題與另一個應用程序有關。 
網站主持人對此評論進行了最小化
您好 jfjoyner3,首先,將我們的 VBA 代碼複製到 ThisWorkbook 模塊後,代碼會自動運行。其次,我們的 VBA 代碼可以正常工作。 請查看我在此評論中上傳的兩個屏幕截圖。
查看附件 (2 / 5)
網站主持人對此評論進行了最小化
Mandyzhou,再次感謝您的詳細指導。 我收到語法錯誤,它指向這一行:

如果 mStrRgAddress <> "" 那麼

你能指導修改這個並刪除語法錯誤嗎?
感謝您!
網站主持人對此評論進行了最小化
每次更新我的數據模型時,此 MAcro 是否會捕獲公式值的變化?
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護