Macro tự xóa (Microsoft Excel)
Patrick đang viết một macro và anh ấy muốn macro tự xóa sau khi đến một ngày hết hạn cụ thể. Có một số cách để tiếp cận nhiệm vụ này. Đầu tiên, bạn có thể viết một macro chỉ hoạt động trước một ngày cụ thể, theo cách sau:
Sub MyMacro() ExpirationDate = #6/1/2013# If Now() < ExpirationDate Then 'Rest of macro goes here End if End Sub
Ý tưởng là nếu (trong trường hợp này) ngày hiện tại là trước ngày 1 tháng 6 năm 2013, thì phần chính của macro sẽ thực thi. Nếu đó là ngày 1 tháng 6 hoặc muộn hơn, thì macro sẽ không thực thi. Tất nhiên, cách tiếp cận này không thực sự xóa macro; nó chỉ đơn giản là kiểm tra xem macro đang được thực thi trước một ngày nhất định.
Để thực sự loại bỏ mã macro, bạn cần thực hiện một cách tiếp cận khác:
Private Sub Workbook_Open() Dim VBComp As VBIDE.VBComponent Dim VBComps As VBIDE.VBComponents 'Delete if Past Date If Date >= #6/1/2013# Then Set VBComps = ActiveWorkbook.VBProject.VBComponents For Each VBComp In VBComps Select Case VBComp.Type Case vbext_ct_StdModule, vbext_ct_MSForm, _ vbext_ct_ClassModule VBComps.Remove VBComp Case Else With VBComp.CodeModule .DeleteLines 1, .CountOfLines End With End Select Next VBComp End If Set VBComps = Nothing Set VBComp = Nothing End Sub
Mã này được điều chỉnh từ một macro ban đầu được viết bởi Chip Pearson, có sẵn trên trang web của anh ấy tại địa chỉ sau:
http://www.cpearson.com/excel/vbe.aspx
Để làm cho macro hoạt động, bạn sẽ cần đảm bảo rằng có tham chiếu đến Microsoft Visual Basic for Applications Extensibility. (Bạn thực hiện việc này bằng cách chọn, trong VB Editor, Tools | References, sau đó chọn Microsoft Visual Basic for Applications Extensibility trong các tài liệu tham khảo có sẵn.)
Macro chạy khi sổ làm việc được mở và nếu ngày lớn hơn hoặc bằng ngày 1 tháng 6 năm 2013, thì mỗi thành phần của VBProject sẽ bị xóa. Điều này có nghĩa là macro rất mạnh mẽ, bởi vì nó xóa mọi thứ, không chỉ một thủ tục hoặc mô-đun đơn lẻ.
Tất nhiên, có một số điều cần lưu ý với macro này.
Đầu tiên, nếu người dùng chọn không bật macro khi mở sổ làm việc, thì mã này sẽ không bao giờ chạy và macro sẽ không bị xóa.
Thứ hai, xóa macro theo cách này rõ ràng là giới thiệu các thay đổi đối với sổ làm việc. Điều đó có nghĩa là khi đóng sổ làm việc, người dùng sẽ được hỏi xem họ có muốn lưu các thay đổi của mình hay không. Nếu họ chọn không, thì việc xóa sẽ không được lưu và macro sẽ chạy lại vào lần tiếp theo sổ làm việc được mở.
_Lưu ý: _
Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.
ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.
Mẹo này (3123) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: