• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

hoe te zien of een Excel bestand macro's heeft

Status
Niet open voor verdere reacties.

mgroen1

Gebruiker
Lid geworden
10 mei 2019
Berichten
190
Weet niet zeker of mijn vraag hier thuis hoort, maar het gaat om het volgende.
Context:

ik heb een verzameling Excel bestanden, een onbekend aantal daarvan hebben macro's in zich, andere niet.
Ik wil (zonder ieder bestand afzonderlijk te openen) inzichtelijk krijgen welke Excels macro's in zich hebben, welke niet.

Is dit op een of andere manier mogelijk?

Bedankt.

gr,
M.
 
Excel bestanden met macro's hebben de extensie xls, .xlsm of .xlsb.
Zonder macro's is het .xlsx.
Globaal dan.

Of bekijk dit eens:
 

Bijlagen

Laatst bewerkt:
Heel sec gezien kun je aan de extensie NIET zien of een bestand macro's bevat; enkel dat een bestand macro's ZOU KUNNEN bevatten.
Of er een manier is om te zien of een bestand ook daadwerkelijk macro's bevat betwijfel ik....
 
Heb je mijn documentje bekeken?
 
Ja. Die controleert of een bestand VBprojecten bevat, maar dat betekent nog steeds niet dat er ook daadwerkelijk macro's instaan.
Ik weet het,....het is een beetje flauw, want waarom zou je (bv) een module aanmaken als je er geen inhoud in zet...
 
Dat is het beste dat ik kon doen.
 
Ziet er op zich goed uit, maar doet exact wat ik ook doe.
Daarnaast, dit:
Code:
PS D:\  Get-childitem -Recurse -Include *.xlsx  D:\myFolder\ | foreach {.\ExcelHasMacros.ps1 $_}
kijkt alleen naar .xlsx documenten die per definitie geen macro's bevatten.
Slordigheidje van de schrijver denk ik.
 
Andere aanpak:

Code:
Sub M_snb()
    Application.AutomationSecurity = 3
    Application.AskToUpdateLinks = False
    
    With Application.FileDialog(4)
        If .Show Then
           c00 = .SelectedItems(1) & "\"
           c01 = Dir(c00 & "*.xls")
           Do Until c01 = ""
             If Right(c01, 4) = ".xls" Then
                 With GetObject(c00 & c01)
                   .UpdateLinks = 2
                   y = 0
                   For Each it In .VBProject.vbcomponents
                      y = y + it.codemodule.countoflines
                   Next
                   .Close 0
                 End With
                If y > 0 Then c02 = c02 & vbLf & c00 & c01 & " has macros"
             End If
             c01 = Dir
           Loop
         End If
    End With
   
   Application.AutomationSecurity = 2
   msgbox c02
End Sub

NB. Dir filtert niet precies: *.xls leidt tot alle extensies die xls bevatten (xlsx, xls, xlsm xlsb)
 
Laatst bewerkt:
@ allen,

Het moest er eens van komen: mijn eerste post op dit forum.
Hierbij nog een mogelijkheid die, maar dat kunnen jullie zelf wel volgens wens aanpassen, niet tot 'ThisWorkbook' beperkt hoeft te blijven.
Code:
Sub macro_lijst()

For Each vb_comp In ThisWorkbook.VBProject.VBComponents
    Set vb_mod = ThisWorkbook.VBProject.VBComponents(vb_comp.Name).CodeModule
    With vb_mod
        regel = .CountOfDeclarationLines + 1
        Do Until regel >= .CountOfLines
            lijst = lijst & vb_comp.Name & ": " & .ProcOfLine(regel, vbext_pk_Proc) & Chr(10)
            regel = regel + .ProcCountLines(.ProcOfLine(regel, vbext_pk_Proc), vbext_pk_Proc)
        Loop
    End With
    Set vb_mod = Nothing
Next vb_comp
MsgBox (lijst)

End Sub

Update: om niet meteen af te gaan dien ik nog te vermelden dat "Microsoft Visual Basic for Applications Extensibility" aan verwijzingen moet worden toegevoegd.
 
Laatst bewerkt:
Mooi, toch al goed dat je weet dat het hier geen zo'n goedkoop koffiekransje is zoals je gewoon bent, Molly.
 
Update: om niet meteen af te gaan dien ik nog te vermelden dat "Microsoft Visual Basic for Applications Extensibility" aan verwijzingen moet worden toegevoegd.
En dat in het Vertrouwenscentrum de toegang tot het objectmodel aangevinkt moet zijn.
 
Andere methode:

Een Excelbestand wordt gekopieerd als Zip-bestand.
Het ZIP-betand wordt vervolgens doorzocht op een VBAproject.
Voordeel: het bestand hoeft niet geopend te worden in Excel.

Code:
Sub M_snb_VBA_check()
   sn = Array("G:\OF\", "__zandloper.xlsb", "zand.zip")

   If Dir(sn(0) & sn(1)) = "" Then Exit Sub

   FileCopy sn(0) & sn(1), sn(0) & sn(2)
   For Each it In CreateObject("Shell.Application").Namespace(sn(0) & sn(2)).Items
      If it.Name = "xl" Then
         For Each it1 In it.GetFolder.Items
            If it1.Name = "vbaProject.bin" Then
              c00 = it1.Name & vbTab & it1.Size
              Exit For
            End If
          Next
       End If
       If c00 <> "" Then Exit For
   Next

   MsgBox c00
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan