2008-12-04 19 views

Trả lời

21

Excel VBA có Application.OnUndo chức năng để xử lý này:

Public Sub DoSomething 

    ... do stuff here 

    Application.OnUndo "Undo something", "UnDoSomething" 
End Sub 

Public Sub UnDoSomething 

    ... reverse the action here 

End Sub
+4

Mặc dù điều này sẽ giúp hoàn tác tác vụ của phụ đầu tiên, rất tiếc bạn vẫn mất "lịch sử" của các tác vụ hoàn tác có thể đã có sẵn trước khi chạy phụ. Nếu có ai biết cách giải quyết vấn đề đó thì đó sẽ là một lợi ích thực sự. –

+0

@ExcelNhà phát triển bạn có ý nghĩa như [ở đây] (http://www.jkp-ads.com/Articles/UndoWithVBA00.asp) – Reafidy

3

Tôi luôn luôn lưu ngay lập tức trước khi chạy các macro của mình (trong khi thử nghiệm ít nhất), nếu mọi thứ có hình quả lê, tôi chỉ có thể thoát mà không lưu và mở lại.

Nướng nó thành macro thực, bạn sẽ phải ghi lại trạng thái cũ của mọi thứ thay đổi (nội dung ô, công thức, định dạng vv ..) trong danh sách sau đó có macro hoàn tác phát lại danh sách đó thứ tự ngược lại.

Ví dụ nếu macro của bạn thay đổi một tế bào nội dung C22 từ "3" thành "7" và định dạng từ "chung" thành "số, 2 số thập phân), danh sách của bạn sẽ là:

C22 value 3 
C22 format general 

Playing này trở lại theo thứ tự ngược (với vĩ mô khác) sẽ phục hồi các thay đổi

Bạn có thể có một tờ toàn bộ thêm để giữ vĩ mô undo thông tin như:.

Step Cell Type Value 
---- ---- ----- ------- 
    1 C22 value   3 
     C22 format general 
    2... 

Nó sẽ không tích hợp rất tốt với sự thật 'hoàn tác' thật không may, nhưng tôi không nghĩ có bất kỳ cách nào xung quanh điều đó.

4

Suy nghĩ của tôi là khá đơn giản, như dòng đầu tiên trong macro của bạn lưu một bản sao trong một thư mục sao lưu sau đó đóng workbook đó và mở lại bản gốc. Nếu bạn không thích kết quả chạy macro của mình, hãy kéo sổ làm việc đã lưu lên. Giữ nó đơn giản hả?