Ngăn chặn các nhắc nhở không cần thiết
19/12/2008

Exel luôn luôn cảnh báo hoặc nhắc nhở bạn xác nhận các hành động và thao tác của bạn. Bài này sẽ hướng dẫn bạn cách loại bỏ các thông báo hoặc nhắc nhở. Các kiểu cảnh báo mà tôi đề cập ở đây chính là các câu hỏi mà Excel hỏi bạn có cho macro hoạt động hay không hoặc là các thông báo về các hành động xóa một trang bảng tính. Sau đây là một số loại cảnh báo của Excel:


Thông báo kích hoạt Macro trong khi trong workbook không có macro

Lỗi này phát sinh do bạn đã từng thực hiện ghi macro trong workbook, và mặc dù bạn đã xóa tất cả các mã lệnh macro nhưng trong các lần mở workbook sau đó Excel vẫn cảnh báo bạn là trong workbook có chứa macro.

  • Xóa macro: vào ngăn Developer | chọn Macro | chọn các macro và nhấn Delete để xóa [E2003: Tools | Macro | Macros].
  • Bạn chỉ nhận được thông báo kích hoạt macro khi thiết lập mức an toàn là “Disable all macro with notification” [E2003: mức Medium].
  • Nếu mức an toàn được thiết lập là “Enable all macors” [E2003: mức Low] thì các macro sẽ tự động kích hoạt mà không có tiếng kêu cảnh báo.
  • Nếu mức an toàn là “ Disable all macros without notification” [E2003: mức High] thì các macro tự động bị khóa lại không được phép thực thi.

Khi bạn ghi một macro, Excel chèn một module vào để chứa các lệnh của bạn và các hàm. Vào lúc mở một bảng tính, Excel kiểm tra xem bảng tính có chứa module nào không và chúng rỗng hay đang chứa các mã lệnh. Việc xóa các macro của bảng tính sẽ xóa tất cả các mã lệnh chứa bên trong module mà không xóa các module – giống như việc uống cạn lon sửa và bỏ lại vỏ hộp sửa vào lại tủ lạnh. Do vậy, bạn cần phải xóa đi các module này theo hướng dẫn sau

Chọn ngăn Developer | chọn nút Visual Basictại nhóm Code hoặc nhấn tổ hợp phím ALT+F11 [E2003: Tools | Macro | Visual Basic Editor (VBE) và chọn View | Project Explorer].



Các nút lệnh trên ngăn Developer

Nếu không thấy cửa sổ Project thì bạn vào View và chọn Project Explorer hoặc nhấn tổ hợp phím Ctrl+R



Cửa sổ Project Explorer

Nhấp chuột lên các ký hiệu (+) để xem các thánh phần bị ẩn của các nhánh con trong cửa sổ Project và hãy tìm đến các module. Bạn nhấp phải chuột lên từng module và chọn lệnh Remove Module từ thực đơn ngữ cảnh. Nếu được hỏi có xuất module ra thành tập tin thì hãy chọn No. Nhấn tổ hợp ALT+Q để đóng cửa sổ VBE.

Thông báo nhắc nhở lưu trữ trong khi không có sự thay đổi nào

Bạn có thể nhận thấy rằng đôi khi bạn chỉ mở một bảng tính và xem một số thông tin trong đó mà Excel cũng nhắc nhở bạn lưu lại các thay đổi trong Personal Macro Workbook mặc dù bạn không hề thay đổi gì trong đó. Có thể bạn đã biết hoặc chưa, bạn đã có sử dụng một hàm volatile (là hàm trong đó có sử dụng phương thức volatile) trong Personal Macro Workbook của mình.

Một personal macro workbook là một bảng tính ẩn được tạo ở lần đầu tiên bạn ghi macro (Tools | Macro | Record NewMacro) với tùy chọn “Personal Macro Workbook” tại “Store Macro in”. Macro này sẽ được mở mỗi khi bạn sử dụng Excel. Một hàm volatile sẽ làm bảng tính tự động tính toán lại mỗi khi bạn thực hiện một thao tác nào đó trong Excel, bao gồm cả việc mở và đóng bảng tính hoặc ứng dụng Excel. Hai trong số các hàm volatile phổ biến là hàm Today() và Now().


Hộp thoại Record Macro

Vì thế, mặc dù bạn chắc chắn là mình không có thay đổi gì trong bảng tính nhưng các hàm volatile này vẫn đang hoạt động âm thầm. Điều này được tính như là một sự thay đổi và Excel sẽ cảnh báo việc lưu trữ mặc dù không tồn tại bất kỳ sự thay đổi nào trong bảng tính.

Nếu bạn muốn Excel dừng việc thông báo lưu trữ các thay đổi mà bạn không hề thực hiện, bạn có một vài cách thực hiện. Cách dễ thấy nhất là ta không lưu các hàm volatile trong Personal Macro Workbook và nên xóa bỏ tất cả các hàm volatile đang có trong đó. Hoặc, nếu bạn cần các hàm volatile nhưng không muốn Excel lưu lại các thay đổi không nhìn thấy này bạn có thể thêm đoạn code sau vào Workbook module của Personal Macro Workbook để đánh lừa nó là bảng tính đã được lưu rồi.


PHP Code:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved = True
End Sub


Để mở Personal Macro Workbook bạn vào View | Unhide trong nhóm Window [E2003: Window | Unhide], chọn Personal.xls từ hộp thoại Unhide và nhấp nút OK. Nhấn tổ hợp phím ALT+F11 để vào cửa sổ VBE, sau đó nhấp phải chuột lên ThisWorkbook từ Personal.xls trong cửa sổ Project rồi chọn View Code và nhập đoạn mã trên vào. Sau khi nhập xong, bạn nhấn tổ hợp phím ALT+Q để đóng của sổ VBE lại.

Tất nhiên, nếu bạn có sử dụng hàm volatile để tính toán lại bảng tính và bạn muốn lưu các thay đổi này thì bạn dùng đoạn mã sau thay cho đoạn mã nêu trên.


PHP Code:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Save
End Sub


Đoạn mã trên sẽ lưu lại Personal Macro Workbook một cách tự động mỗi khi nó được mở.

Dừng các cảnh báo của Excel về các macro đã ghi

Một trong số nhiều hạn chế của việc ghi macro là không tự thêm vào các lệnh loại bỏ các thông báo khi thực thi. Ví dụ như bạn ghi một macro xóa một worksheet và khi thực thi macro này bạn sẽ nhận được thông báo xác nhận việc xóa worksheet. Muốn tắt cảnh báo này, bạn làm như hướng dẫn sau:

Chọn ngăn Developer | Macros tại nhóm Code hoặc nhấn ALT+F8 [E2003: Tools | Macro | Macros] để gọi hộp thoại Macro. Tại Macro in chọn “All Open Workbooks”, chọn tên macro mà bạn vừa ghi và nhấn nút Edit. Đặt con trỏ lên trước dòng lệnh đầu tiên của thủ tục và nhập vào dòng lệnh sau:

Application.DisplayAlerts = False

Tại sau dòng lệnh cuối cùng, bạn thêm vào:

Application.DisplayAlerts = True

Macro của bạn sau khi thêm 2 dòng lệnh trên sẽ giống như sau:


PHP Code:

Sub MyMacro( )
'
' MyMacro Macro

Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub


Lưu ý rằng, bạn đã bật chức năng cảnh báo của Excel lại tại dòng lệnh cuối cùng của macro. Nếu bỏ dòng lệnh này, bạn sẽ không bao giờ nhận được các cảnh báo nữa và điều này có thể gây nguy hại vì có thể bạn vô tình thực hiện một thao tác nhầm lẫn nghiêm trọng nào đó mà không hề nhận được cảnh báo để xác nhận hành động.
URL của bài viết này::http://www.vnschool.net/modules.php?name=News&file=article&sid=2780