Word / 使用VBA分割word內的表格 番外 使用復原紀錄

Word / 使用VBA分割word內的表格 前2版的程式到最後都會關閉被分割的原始檔案

版本1因為又是程式碼存在的檔案,所以設計成把整個word關掉

版本2則是以不存檔的方式關閉檔案

想說有沒有比較好的方式

這次是嘗試用在編輯word內容常會用到的復原

不過如果直接用程式碼輸出 快速鍵 ctrl+z

復原的作用是在當下的VBE視窗,也就是復原程式碼的修改

後來爬到 Can I create an undo transaction in Word or Excel? (VSTO)

被打勾勾的最佳答案看起來是建立捕捉快速鍵的增益集

但是因為程式碼太長了,也搞不懂程式流程,於是放棄看完

不過其他人的回應提到

可以用 Application.UndoRecord object

比較接近我想要的方式,而且比較簡單

在測試的過程中,因為會切換不同檔案,所以復原紀錄不完整

一開始還不知道發生什麼事,爬文才知道如果跨文件的話,A文件不會記錄B文件的復原紀錄

而且自訂復原紀錄名稱似乎也會失效

StartCustomRecord does not work when making changes in two documents

If custom undo records are nested within other custom undo records, this property specifies what string appears on the undo stack after 
all custom undo actions have completed. If multiple calls to the StartCustomRecord method are nested, the string specified by the first 
call will be returned by this property. If no action is active, the property returns an empty string.

以版本1的程式碼進行修改

修改了關閉程式的部分

' 不存檔 關閉整個word程式
Application.Quit SaveChanges:=wdDoNotSaveChanges

修改成復原動作

由於在VBA執行的檔案,只會紀錄到刪除表格列的動作

'復原動作
ActiveDocument.Undo (u - 1)

所以在處理表格資料的迴圈開始之前,用變數u紀錄原始的表格列數

-1 是因為不會刪除第一列標題

 '紀錄表格初始列數
u = mytable.Rows.Count

這樣的話不管有沒有存檔都沒差了