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

Verberkmoes

Verenigingslid
Lid geworden
26 feb 2002
Berichten
59
Goedemiddag,
Ik ben met een Excel macro bezig en wil op een bepaald moment het aantal bestanden in een map weten.

Beschrijving situatie:
Na klikken van de knop "Open data" verschijnt de browser (zie bijlage).
Na keuze van het juiste map (in dit geval MAN_5011_FFT_Various_Ranges) dient een van de bestanden in deze map geopend te worden (met knop Open of het klikken op een de bestanden).
Dan worden alle bestanden in de map automatisch geopend en in een nieuw Excel bestand op een blad gezet en daarna verder verwerkt.
Wat ik nu echter wil is eerst het totaal aantal *.RVD bestanden in de map tellen, dus zodra een van de bestanden wordt geopend, alvorens dat de macro verder gaat.
Graag zou ik hulp hebben met de VBA procedure hiervoor.

Opmerking:
De namen van de map waar de *.RVD bestanden staan is willekeurig en dus niet steeds hetzelfde en ook de directory is willekeurig.

Alvast erg bedankt voor de hulp.
Met vriendelijk groet
 

Bijlagen

Laatst bewerkt:
En waar wil je dat allemaal in?
Een Website? Word? Excel?
 
Dus wat in je Word document staat heb je al?
Plaats dan dat document.
 
Dat Word document is alleen maar een voorbeeld van wat er gebeurt als je de knop Open data in Excel aanklikt.
Op het moment dat een van de *.RVD bestanden moet het aantal *.RVD bestanden geteld worden in de map.
Ik kan je ook wel de Excel macro sturen met een testbestand, dan kan je zien wat de bedoeling is.
 
RVD bestanden tellen.

Rode gedeelte aanpassen.
Code:
Sub hsv() 
 MsgBox UBound(Split(CreateObject("wscript.shell").exec("cmd /c Dir ""[COLOR=#ff0000]C:\users\verberkmoes\documents[/COLOR]\*.rvd"" /b").stdout.readall, vbCrLf))
End Sub
 
Je weet dat Applocation.FileDialog ook een FolderPicker optie heeft die je in staat stelt een map te laten kiezen?
Code:
Sub GetFolderDemo()
    Dim FD As FileDialog
    Set FD = Application.FileDialog(msoFileDialogFolderPicker)
    With FD
        .Title = "Selecteer een map S.V.P."
        If .Show Then
            MsgBox "Gekozen: " & .SelectedItems(1)
        Else
            MsgBox "Geanuleerd"
        End If
    End With
End Sub
 
Voor het importeren van alle bestanden uit een map gebruik je tegenwoordig PowerQuery: Gegevens, Gegevens ophalen, Uit Bestand, Uit Map
De map dynamisch maken vergt enig aanpaswerk (na definieren van de query naar 1 bepaalde map) maar is niet heel lastig.
 
Hartelijk dank voor de adviezen,

De volgende instructie werkt goed:

Sub Count_Files()

Dim NUMBER_OF_FILES As Long
Dim objFSO As Object
Dim FILE_PATH As String

FILE_PATH = "C:\Users\Bert Verberkmoes\Desktop\MAN_5011_FFT_Various_Ranges"

Set objFSO = CreateObject("Scripting.FileSystemObject").GetFolder(FILE_PATH)
NUMBER_OF_FILES = objFSO.Files.Count
Set objFSO = Nothing


[A1] = NUMBER_OF_FILES

End Sub

Echter hierbij worden alle bestanden geteld terwijl ik alleen de *.RVD bestanden wil tellen. Hoe is dit aan te passen in deze instructie? Daar zou ik erg mee geholpen zijn.
 
Kijk eens naar dit:
Code:
Sub GetRVD()
    Dim FSO As New FileSystemObject
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set fld = FSO.GetFolder("C:\Users\Bert Verberkmoes\Desktop\MAN_5011_FFT_Various_Ranges\")
 
    For Each fil In fld.Files
        If fil.Name Like "*.RVD" Then
            FileCount = FileCount + 1
            Debug.Print fil.Name
        End If
    Next fil
    Debug.Print FileCount
End Sub
 
Hartelijk dank voor de adviezen,

Echter hierbij worden alle bestanden geteld terwijl ik alleen de *.RVD bestanden wil tellen. Hoe is dit aan te passen in deze instructie? Daar zou ik erg mee geholpen zijn.

Niets met het advies van #6 gedaan.
 
Die had ik niet gezien en werkt prima.
 
Dacht ik ook.
Je kan het altijd aanpassen met de folderpicker.
 
en bij Ubound 1 optellen......

Alternatief: selecteer alle bestanden die getoond worden en druk op 'OK'.

Code:
Sub M_snb()
    With Application.FileDialog(msoFileDialogFilePicker)
       .InitialFileName ="C:\Users\Bert Verberkmoes\Desktop\MAN_5011_FFT_Various_Ranges\*.rvd"
       .AllowMultiSelect = True
       If .Show Then MsgBox .SelectedItems.Count
    End With
End Sub

In de eigenschappen van de selektie tref je overigens ook al het aantal geselekteerde bestanden aan.
Dus zou je de regel met .Selecteditems.count achterwege kunnen laten.
 
Laatst bewerkt:
Advies #6 ga ik nog proberen.

Wat advies #10 betreft:
Loopt vast op Dim FSO As New FileSystemObject.
Dit gewijzigd in Dim FSO As Object.
Daarna werkt het goed.

Wat is trouwens de functie van Debug.Print fil.Name en Debug.Pring FileCount ?

Hartelijk dank!
 
Druk in de VB editor op CTRL-G.
Dan opent het direct venster.
Wat je met Debug.Print afdrukt komt daar te staan.
 
Je hebt een library nodig als je het filesystemobject via die manier aanroept, daarom vermoedelijk de foutmelding
 
Deze dus:
 

Bijlagen

  • Schermafbeelding 2022-01-05 140333.png
    Schermafbeelding 2022-01-05 140333.png
    73,4 KB · Weergaven: 13
Of gebruik late binding
 
Precies :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan