شرکت ریچاردز نیز مانند بسیاری دیگر از اکسل بسیار استفاده می کند. در واقع آنها هزاران و هزاران کتاب کار اکسل دارند که در طول سال ها جمع آوری کرده اند. ریچارد به راهی نیاز دارد تا بفهمد کدام یک از این کتابها دارای ماکروهای VBA هستند، بدون اینکه نیازی به باز کردن و بازرسی هر کتاب به صورت جداگانه باشد. او فکر می کند که آیا راه آسانی برای انجام این کار وجود دارد؟
یک راه نسبتاً ساده برای یافتن همه کتابهای کاری حاوی ماکرو این است که فقط به دنبال فایلهایی بگردید که از پسوندهای XLSM یا XLSB استفاده میکنند. کتابهایی که حاوی ماکرو هستند باید با استفاده از این پسوندها در فایلهایی ذخیره شوند. در حالی که 100٪ ضد اشتباه نیست، اما مکان خوبی برای شروع است.
همچنین میتوانید از قابلیتهای جستجوی ویندوز (خارج از اکسل) استفاده کنید و هر فایلی که حاوی متن «End Sub» یا «End Function» باشد را جستجو کنید. این به سرعت هر کتاب کار نامزد بالقوه را شناسایی می کند، زیرا هر رویه VBA باید از یکی از این دو عبارت در انتهای خود استفاده کند. (با این حال، با فایلهای XLSB کار نمیکند، زیرا کد ماکرو آنها در قالب باینری ذخیره میشود.)
اگر از کتابهای کار قدیمی (آنهایی که با فرمت فایل اکسل 2003 توسعه یافتهاند) استفاده میکنید، در واقع باید به داخل هر یک از کتابهای کاری نگاه کنید. این را می توان به صورت برنامه نویسی انجام داد، به این معنی که می توانید یک ماکرو داشته باشید که هر کتاب کار را در یک پوشه باز می کند و آن را بررسی می کند تا ببیند آیا ماکروهایی در آن وجود دارد یا خیر.
به عنوان مثال، میتوانید یک ماکرو ایجاد کنید که از طریق هر یک از فایلهای یک فهرست راهاندازی میکند و تعیین میکند که آیا فایل یک کتاب کار اکسل است یا خیر. سپس می تواند فایل را باز کند و بررسی کند که آیا یک پروژه VBA در آن وجود دارد یا خیر.
Sub FindMacros()
Dim sPath As String
Dim sFile As String
Dim sFoundFiles As String
specify directory to use - must end in ""
sPath = "C:MyDataExcel 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
این مثال از ویژگی HasVBProject (معرفی شده به مدل شی اکسل در اکسل 2007) برای تعیین اینکه آیا فایل ماکرو دارد یا خیر استفاده می کند. پس از تکمیل، ماکرو جعبه پیامی را نمایش می دهد که برگه های حاوی ماکرو را فهرست می کند.