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 = #1/1/2020#     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 trước ngày 1 tháng 1 năm 2020, thì phần thân chính của macro sẽ thực thi. Nếu đó là ngày 1 tháng 1 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 >= #1/1/2020# 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 1 năm 2020, 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 (12812) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: