Có cách nào UNDO sau khi chạy VBA?

  • Thread starter Thread starter BNTT
  • Ngày gửi Ngày gửi
Liên hệ QC

BNTT

Bùi Nguyễn Triệu Tường
Thành viên danh dự
Tham gia
3/7/07
Bài viết
4,946
Được thích
23,208
Nghề nghiệp
Dạy đàn piano
Các bác cho tôi hỏi tí.

Ví dụ mình làm một cái Form, đơn giản thôi, quy định sau khi nhấn OK thì sẽ ghi số 1 vào cell A1.

Vấn đề tôi muốn hỏi là:
- Nếu ở ngoài Excel, sau khi gõ 1 vào A1, nhấn Undo (hay Ctrl_Z) là số 1 biến liền.
- Nhưng khi số 1 ở cell A1 được cái Form tôi vừa nói ghi vào, thì không thể Undo cho nó biến.​
Có cách nào để có thể Undo những thay đổi trong bảng tính sau khi mình chạy một cái VBA không?

 
Có cách đây,

Vấn đề ở chỗ chúng ta phải xác định nx thông tin cần undo va tại sub cần undo chúng ta có thêm dòng
PHP:
Application.OnUndo "tieu de chi dan undo", "undosub"
trong đó "undosub" là tên sub thực hiện việc khôi phục undo

-> khi này sau khi chạy macro ta có thể bấm nút undo của excel để khôi phục số liệu,

cụ thể, tigertiger đã làm ví dụ cho bài toán tìm tổng k số liên tiếp có tổng max trong dãy số nguyên,


PHP:
Public <........khai bao cac bien chua thong tin undo ..........>

Sub TongMax()
'< ..khai bao.......>

'doan luu lai thong tin cho Undo

' <..........Code cua sub...........>


'dang ky sub cho viec un do
Application.OnUndo "Undo tong max", "undotongmax"

End Sub
_________________________________________________________

'''   sub undo khoi phuc so lieu
Sub undotongmax()
    <........................>
End Sub
xem file gửi kèm

mong góp ý
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
anhtuan1066 đã viết:
Khó nhai ở công đoạn xác định thông tin nào cần lưu ấy...
File của TigerTiger chạy tốt, tuy nhiên chẳng lẽ cứ mỗi cái code là lại phải kẹp 1 cái bày cho nó Undo à... Khó thật...
 
Upvote 0
BNTT đã viết:
File của TigerTiger chạy tốt, tuy nhiên chẳng lẽ cứ mỗi cái code là lại phải kẹp 1 cái bày cho nó Undo à... Khó thật...
Đành vậy! Các trang nước ngoài tìm khắp nơi cũng chỉ là thế! Hy vọng mai này MS có thể thêm tính năng Undo cho VBA
Ngoài ra vẫn còn 1 cách khác ko dùng VBA, đó là trước khi chạy code, bạn lưu file... sau đó nếu chạy code mà có gì sai cần Undo lại thì đơn giản là đóng file ko lưu... he.. he..
 
Lần chỉnh sửa cuối:
Upvote 0
BNTT đã viết:
File của TigerTiger chạy tốt, tuy nhiên chẳng lẽ cứ mỗi cái code là lại phải kẹp 1 cái bày cho nó Undo à... Khó thật...

Đúng đấy bác ạ, không khả thi lắm.
Khi chạy code, nó sẽ copy, tính toán, xóa tá lả luôn, vì thế viết code để dịch ngược lại thì . . . chết.

Chắc ý của bác muốn Undo theo kiểu từng bước (by Step) như của excel phải không ???

Thân!
 
Upvote 0
Chắc ý của bác muốn Undo theo kiểu từng bước (by Step) như của excel phải không ???
Đúng rồi đấy! Bắp có cách nào khác ko? Vì tôi cũng tìm trên mạng nhưng ko thấy cách nào ngoài cách này cả!
 
Upvote 0
Đúng là mình muốn là sau khi chạy VBA, mình có thể Undo từng bước một giống y như mình xài Ctrl_Z ở Excel (và gần như ở hầu hết những phần mềm khác)...
Ví dụ, cái VBA của mình sẽ làm thay đổi bảng tính 5 chuyện, thì mình cũng có thể undo 5 lần, mà mỗi lần là quay ngược lại 1 chuyện mình đã biểu VBA làm... Cũng không phải là Undo 1 phát thôi mà quay trở ngược lại nguyên xi 5 chuyện (nghĩa là trước khi chạy VBA)...
Không biết nói vầy ông Tía có hiểu hông...
 
Upvote 0
anhtuan1066 đã viết:
Đúng rồi đấy! Bắp có cách nào khác ko? Vì tôi cũng tìm trên mạng nhưng ko thấy cách nào ngoài cách này cả!

Em thì . . bó tay. Tuy nhiên bàn qua cách của Bill nhé :

- Khi mở 1 File excel thì Bill sẽ nạp toàn bộ File đó vào Memory (File ảnh), File ảnh này như là người anh em song sinh với File gốc, tất cả mọi thay đổi của File (khi ta chưa lưu) sẽ được ghi nhớ hết vào bộ nhớ.
- Bình thường Excel sẽ lưu 16 bước làm Excel thay đổi gần nhất
- Khi ta nhấn Undo thì theo thứ tự các giá trị trước thay đổi sẽ được phục hồi trở lại
- Chỉ khi nào ta nhấn lưu thì khi đó File ảnh sẽ chính thức thay thế File gốc, mọi File tạm lưu giữ sự thay đổi của excel sẽ bị xóa.

Vì vậy em . . . bó tay, tuy nhiên có thể:
- Khi chưa chắc chắn thì đừng lưu, File ta đang dùng chỉ là File tạm, nếu muốn Undo thì hãy thoát không lưu và dùng lại File gốc
- Trước khi chạy 1 Sub nào đó, ta hãy tạo ra 1 bản sao lưu của File đó (Save As) có đánh dấu ngày giờ, sau đó muốn lấy lại dữ liệu thì . . . lấy lại File đã sao lưu. (hơi dở hơi)

Thân!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom