Gene đã yêu cầu một cách để xóa macro khỏi một macro. Anh ấy có một trang tính lớn sử dụng macro để ghép một đơn đặt hàng.

Bước cuối cùng, macro sẽ xóa dữ liệu ban đầu không còn cần thiết cho đơn đặt hàng đã hoàn thành. Sổ làm việc giảm dần này sau đó được lưu dưới một tên mới. Gene cần macro, ngay trước khi lưu, để xóa macro được lưu trữ trong trình xử lý sự kiện SelectionChange.

Có một số cách để xử lý vấn đề này. Một cách là tránh phải xóa tất cả cùng nhau. Thay vào đó, hãy yêu cầu macro của bạn tạo một sổ làm việc mới và sau đó chuyển sang sổ làm việc đó, một bản sao dữ liệu bạn cần. Sau đó, bạn có thể chia nhỏ dữ liệu trong sổ làm việc mới và lưu nó dưới dạng đơn đặt hàng của mình. Các macro trong sổ làm việc hiện có không bao giờ được sao chép sang sổ làm việc mới trong suốt quá trình này, vì vậy bạn không cần phải lo lắng về việc xóa chúng.

Việc sao chép tất cả các trang tính trong sổ làm việc hiện tại sang một sổ làm việc mới là rất dễ thực hiện. Macro sau đây cho thấy nó được thực hiện như thế nào:

Sub CopyThisWorkbook()

Dim CopiedWB As String

CopiedWB = "Copy of " & ActiveWorkbook.Name

Sheets.Copy     ActiveWorkbook.SaveAs Filename:=CopiedWB, _       FileFormat:=xlNormal End Sub

Phương pháp Sao chép, khi được áp dụng cho bộ sưu tập Trang tính, sao chép tất cả các trang tính trong sổ làm việc đang hoạt động sang một sổ làm việc mới và làm cho sổ làm việc mới hoạt động. Lệnh cuối cùng lưu sổ làm việc mới dưới một tên mới.

Tất nhiên, nếu bạn cần một số macro của mình có trong sổ làm việc mới, nhưng không phải tất cả chúng (chẳng hạn như trình xử lý sự kiện SelectionChange), thì tốt nhất bạn nên xóa những gì bạn không cần và chỉ cần lưu dưới một tệp mới Tên. Macro ví dụ sau cho biết cách xóa trình xử lý sự kiện SelectionChange khỏi mã trang tính cho Sheet1.

Sub DeleteProcedure()

Dim VBCodeMod As CodeModule     Dim StartLine As Long     Dim HowManyLines As Long

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule     With VBCodeMod         StartLine = .ProcStartLine("Worksheet_SelectionChange", _           vbext_pk_Proc)

HowManyLines = .ProcCountLines("Worksheet_SelectionChange", _           vbext_pk_Proc)

.DeleteLines StartLine, HowManyLines     End With End Sub

Sau khi hoàn tất macro, sổ làm việc có thể được lưu và macro mong muốn sẽ không có trong tệp đã lưu. Macro này được điều chỉnh từ thông tin được cung cấp tại trang Web của Chip Pearson’s, bạn nên tham khảo nếu cần thêm thông tin về kỹ thuật này:

http://www.cpearson.com/excel/vbe.aspx

_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 (3073) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003.