Công ty của Richard, giống như nhiều công ty khác, sử dụng Excel khá ít. Trên thực tế, họ có hàng nghìn hàng nghìn bảng tính Excel mà họ đã thu thập trong nhiều năm. Richard cần một cách để tìm ra sổ làm việc nào có macro VBA trong đó mà không cần phải mở và kiểm tra từng sổ làm việc riêng lẻ. Anh ấy tự hỏi liệu có cách nào dễ dàng để làm điều này không.

Một cách khá đơn giản để tìm tất cả các sổ làm việc của bạn có chứa macro là chỉ cần tìm bất kỳ tệp nào sử dụng phần mở rộng XLSM hoặc XLSB.

Sổ làm việc có chứa macro phải được lưu trữ trong các tệp sử dụng các phần mở rộng này. Mặc dù không hoàn toàn 100% nhưng đây là một nơi tốt để bắt đầu.

Bạn cũng có thể sử dụng khả năng tìm kiếm của Windows (bên ngoài Excel)

và tìm kiếm bất kỳ tệp nào có chứa văn bản “End Sub” hoặc “End Function”. Điều đó sẽ nhanh chóng xác định bất kỳ sổ làm việc ứng viên tiềm năng nào, vì bất kỳ thủ tục VBA nào cũng phải sử dụng một trong hai câu lệnh này ở cuối.

Nếu bạn đang sử dụng sổ làm việc kế thừa (những sổ được phát triển bằng cách sử dụng định dạng tệp của Excel 2003), thì bạn thực sự cần xem xét bên trong từng sổ làm việc. Điều này có thể được thực hiện theo chương trình, có nghĩa là bạn có thể có một macro mở từng sổ làm việc trong một thư mục và kiểm tra nó để xem có bất kỳ macro nào trong đó không.

Ví dụ: bạn có thể tạo macro đi qua từng tệp trong thư mục và xác định xem tệp có phải là sổ làm việc Excel hay không. Sau đó, nó có thể mở tệp và kiểm tra xem nó có dự án VBA bên trong hay không.

Sub FindMacros()

Dim sPath As String     Dim sFile As String     Dim sFoundFiles As String

'specify directory to use - must end in "\"

sPath = "C:\MyData\Excel Data\"



sFile = Dir(sPath)

Do While sFile <> ""

If InStr(sFile, ".xls") > 0 Then             Workbooks.Open (sPath & sFile)

If Workbooks(sFile).HasVBProject Then                 sFoundFiles = sFoundFiles & sFile & vbCrLf             End If             Workbooks(sFile).Close (False)

End If         sFile = Dir     ' Get next filename     Loop     If Len(sFoundFiles) = 0 Then         MsgBox "No workbooks found that contain macros"

Else         sFoundFiles = "The following workbooks contain macros:" & _           vbCrLf & vbCrLf & sFoundFiles         MsgBox sFoundFiles     End If End Sub

Ví dụ này sử dụng thuộc tính HasVBProject (được giới thiệu với mô hình đối tượng Excel trong Excel 2007) để xác định xem tệp có bất kỳ macro nào hay không. Khi hoàn tất, macro sẽ hiển thị một hộp thông báo liệt kê những trang tính có chứa macro.

_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 (12466) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.

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: