• 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.

Aantal bestanden in een map tellen met VBA (Excel macro)

Status
Niet open voor verdere reacties.
#18: Die Library is inderdaad standaard niet ingeschakeld.
Daarom lijkt me het beter om Dim .... As Object te gebruiken. Of is dat onzin?
 
Het is geen onzin, maar in dit geval ook niet nodig.
 
Zonder verwijzing naar een library dus zo

Code:
Sub jec()
 XPath = "C:\Users\Bert Verberkmoes\Desktop\MAN_5011_FFT_Various_Ranges\"
 For Each it In CreateObject("scripting.filesystemobject").getfolder(XPath).Files
    If it.Name Like "*RVD" Then x = x + 1
 Next
 MsgBox x
End Sub
 
Dan liever:

Code:
Sub M_snb()
 with CreateObject("scripting.filesystemobject").getfolder("C:\Users\Bert Verberkmoes\Desktop\MAN_5011_FFT_Various_Ranges\")
   For Each it In .Files
    If right(lcase(it.Name),4)=".rvd" Then x = x + 1
   Next
 end with

 MsgBox x
End Sub
 
Geen ubound + 1 nodig omdat er altijd nog een lege extra waarde in de array wordt gezet
In de cel zie je het en na splitten zie je het ook

Code:
Cells(1, 1).Value = CreateObject("wscript.shell").exec("cmd /c Dir ""C:\Users\Bert Verberkmoes\Desktop\MAN_5011_FFT_Various_Ranges\*.rvd"" /b").stdout.readall
 
@Snb,

Dan lijkt me deze nog beter, nu we toch bezig zijn:)
Verschil tussen de 3 zul je in ieder geval niet merken

Code:
Sub jec()
 With CreateObject("scripting.filesystemobject")
    For Each it In .getfolder("C:\Users\Bert Verberkmoes\Desktop\MAN_5011_FFT_Various_Ranges\").Files
      If .GetExtensionName(it) = "rvd" Then x = x + 1
    Next
 End With
 MsgBox x
End Sub
 
Jawel bij grote aantallen.
Voorkom overbodige variabelen.
Voorkom dat een bewerking (getfolder) onnodig vaak wordt uitgevoerd.

Code:
Sub M_snb()
  With CreateObject("scripting.filesystemobject").getfolder("C:\Users\Bert Verberkmoes\Desktop\MAN_5011_FFT_Various_Ranges\")
    For Each it In .Files
       x = x - (.parent.getExtensionName(it) = "rvd")
    Next
  End With MsgBox x
End Sub
 
Laatst bewerkt:
Na 1x uitvoeren is die voor de complete lus toch geladen? Of wordt die steeds opnieuw uitgevoerd binnen een loop, kan het bijna niet geloven.
 
Zojuist getest met 2000 files.
Alles even snel, het object zal niet steeds opnieuw geladen worden binnen de lus

Code:
Sub test()
 t = Timer
 ReDim ar(2000)
 
 With CreateObject("scripting.filesystemobject")
    For Each it In .getfolder("C:\Users\xxx\Downloads\").Files
      If .getextensionname(it) = "xlsx" Then
        ar(x) = it.Name
        x = x + 1
      End If
    Next
 End With
 
 Cells(1, 1).Resize(x) = Application.Transpose(ar)
 MsgBox Timer - t
End Sub

Code:
Sub testt()
 t = Timer
 ReDim ar(2000)
  
 With CreateObject("scripting.filesystemobject").getfolder("C:\Users\xxx\Downloads\")
    For Each it In .Files
       If it.Name Like "*xlsx" Then
         ar(x) = it.Name
         x = x + 1
       End If
    Next
 End With
  
 Cells(1, 1).Resize(x) = Application.Transpose(ar)
 MsgBox Timer - t
End Sub


Code:
Sub testtt()
 t = Timer
 ReDim ar(2000)
 XPath = "C:\Users\xxx\Downloads\"
 
 For Each it In CreateObject("scripting.filesystemobject").getfolder(XPath).Files
   If it.Name Like "*xlsx" Then
      ar(x) = it.Name
      x = x + 1
    End If
 Next
 
 Cells(1, 1).Resize(x) = Application.Transpose(ar)
 MsgBox Timer - t
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan