25/05/2018, 23:29

HOÀN TÁC MỘT CHƯƠNG TRÌNH CON TRONG VBA

Những người sử dụng máy tính thường có thói quen hoàn tác lại một thao tác nào đó. Hầu hết những thao thác bạn thực hiện trong Excel đều có thể được hoàn tác. Trong lập trình VBA, có lẽ bạn sẽ tự hỏi rằng liệu có thể hoàn tác lại một chương trình con hay không? Câu trả lời là có . Tuy nhiên, một ...

Những người sử dụng máy tính thường có thói quen hoàn tác lại một thao tác nào đó. Hầu hết những thao thác bạn thực hiện trong Excel đều có thể được hoàn tác. Trong lập trình VBA, có lẽ bạn sẽ tự hỏi rằng liệu có thể hoàn tác lại một chương trình con hay không? Câu trả lời là . Tuy nhiên, một câu trả lời đầy đủ hơn là nó không phải luôn luôn dễ dàng thực hiện.

Khiến cho chương trình con của bạn không thể hoàn tác được không phải là điều tự động. Khi đó, chương trình con này cần được lưu trữ lại tình trạng trước đó để nó có thể được khôi phục lại khi người dùng chọn lệnh Edit Undo. Cách bạn làm như thế nào sẽ thay đổi tùy thuộc vào chương trình con của bạn là gì? Trong hầu hết các trường hợp, bạn sẽ cần phải lưu lại  toàn bộ worksheet. Ví dụ, nếu chương trình của bạn chỉ thực hiện sửa đổi với một dãy thì bạn chỉ cần lưu lại nội dung của dãy đó.

Mã dưới đây mô tả cách làm thể nào để cho phép thực hiện lệnh Edit Undo sau khi một chương trình con được chạy. Chương trình con này chỉ đơn giản chèn thêm 0 vào mọi ô trong dãy đã được lựa chọn. Các mã được sử dụng để lưu lại nội dung lựa chọn.

Thử ví dụ mã dưới đây:

  1. Copy mã này vào một module VBA rỗng
  2. Nhập dữ liệu vào một dãy trong worksheet
  3. Chọn dãy và chạy chương trình ZeroRange. Các ô sẽ được thay thế bởi những số 0.
  4. Chọn lệnh Edit Undo. Nội dung gốc sẽ được khôi phục lại.

Nó thực hiện như thế nào?

Mảng OldSelection sẽ giúp lưu trữ lại địa chỉ ô và nội dung trong ô ( sử dụng một kiểu dữ liệu tùy chỉnh). Lưu ý rằng mảng này được công khai như một biến Public nên nó có thể áp dụng với tất cả các chương trình. Tình trạng cuối cùng trong ZeroRange sẽ chỉ định nội dung được hiển thị trong trình đơn Hoàn tác (Undo menu) , và chương trình được gọi khi lệnh được lựa chọn. UndoZero sẽ tạo vòng lặp qua các mảng OldSelection và khôi phục lại giá trị trong các ô. Lưu ý rằng cũng phải lưu lại cả workbook và worksheet để đảm bảo rằng những ô đúng sẽ được khôi phục lại thậm chí khi mà người dùng thoát ra khỏi worksheet gốc.

Ví dụ về “Hoàn tác” (Undo)

View the code on Gist.
0