VBcode telt aantal bestanden in een map

Status
Niet open voor verdere reacties.

Bospeen

Gebruiker
Lid geworden
23 aug 2005
Berichten
150
Beste forumleden,

Kan iemand mij op weg helpen met VBcode die het aantal bestanden telt in een specifieke map? (zo dit mogelijk is)
Toelichting: poststukken voor medewerkers worden gescand en (als PDF/Docx) opgeslagen in een map. Als er poststukken zijn, wil ik dat mijn applicatie dit weergeeft.

Vriendelijke groet en bij voorbaat dank.
 
Bedankt Wampier, ik kom hiermee een eind maar nog niet ver genoeg...
Ik wil dat mijn applicatie het aantal bestanden in een archiefmap weergeeft op een gegevensblad, dus uit de map per record (ID en KW)!
De volgende code leest (bij openen van het gegevensblad) inderdaad dit aantal uit, maar geeft bij ELK record het aantal van het EERSTE record.
Ben al aan het puzzelen geweest, maar niks leidt tot succes. Weet jij waar deze code de fout in gaat?


Code:
Private Sub Form_Open(Cancel As Integer)

DoCmd.Maximize


On Error GoTo Err_CountFiles

Dim strDir As String
Dim fso As Object
Dim objFiles As Object
Dim obj As Object
Dim lngFileCount As Long


    strDir = "C:\DATA\test\" & Me.ID & "\" & Me.KW

    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Set objFiles = fso.GetFolder(strDir).Files
    
    lngFileCount = objFiles.Count

Me.Tekst7 = lngFileCount


Exit_CountFiles:
    Exit Sub
    
Err_CountFiles:
    Me.Tekst7 = 0
    Resume Exit_CountFiles

End Sub
 
Laatst bewerkt:
Waar het fout gaat is vrij simpel: je gebruikt de functie bij het laden van het formulier. Dat gebeurt maar één keer, en dus wordt de code maar één keer uitgevoerd. En wel voor het eerste records. Wil je ook bij andere records een telling zien, dan moet je de functie dus bij een andere gebeurtenis zetten. Overigens kan hij een stuk korter (en dat komt ook doordat jij een behoorlijk aantal nutteloze lege regels hebt gemaakt).

Code:
Private Sub Form_Current()
On Error GoTo Err_CountFiles
Dim strDir As String
Dim objFiles As Object

    strDir = "C:\DATA\test\" & Me.ID & "\" & Me.KW
    Set objFiles = CreateObject("Scripting.FileSystemObject").GetFolder(strDir).Files
    Me.Tekst7 = objFiles.Count
    Exit Sub
    
Err_CountFiles:
    Me.Tekst7 = 0
End Sub

En ja, hij kan nóg korter :).
 
Tja, ik wil wel dat bij openen van het gegevensblad alle records meteen zijn bijgewerkt met het juiste aantal bestanden...
Is het ook mogelijk om dan zoiets aan de code toe te voegen als...

Code:
For Each lngFileCount In objFiles
If Not objF.Name Like "~$*" Then       'telt geen systeembestanden mee
    Me.Tekst7 = lngFileCount
    End If
    Next objF

Alleen werkt dit niet
 
Ik zou eerder filteren op extensies. Een lus werkt uiteraard niet, want er valt niks te lussen.
 
Ik begrijp niet wat je bedoelt Octafish... filteren op extenties???
Zou het overigens verschil maken als ik hiervoor een doorlopend formulier voor maak i.p.v. een gegevensblad?
 
Ik snap nog steeds niet helemaal wat je nu wilt.
Tja, ik wil wel dat bij openen van het gegevensblad alle records meteen zijn bijgewerkt met het juiste aantal bestanden...
Wat is hier de bedoeling van? Bij bladeren door records op een enkelvoudig formulier wordt de code voor dat record uitgevoerd. Lijkt mij een prima oplossing.
Op een doorlopend formulier werkt zo'n constructie nooit, omdat je toch maar één record ophaalt. Alleen zie je dan op een doorlopend formulier dat ene tekstvak (Tekst7) net zo vaak herhaald met dezelfde uitkomst als je records ziet op je formulier. Nogal zinloos dus.
Je lijkt nu te filteren op documenten die je niet wilt zien. Je kunt beter filteren op bestanden die je wél wilt zien. En de code kon korter, zoals ik al zei. Ik vermoed zo:
Code:
Private Sub Form_Current()
On Error GoTo Err_CountFiles

    Me.Tekst7 = CreateObject("Scripting.FileSystemObject").GetFolder("C:\DATA\test\" & Me.ID & "\" & Me.KW).Files.Count
    Exit Sub
    
Err_CountFiles:
    Me.Tekst7 = 0
End Sub
 
Octa,
Op een enkelvoudig formulier is dit geen probleem, lukt idd prima. Waarom het aantal bestanden in een gegevensblad... da's een procesmatige kwestie: gebruikers moeten voor al hun dossiers (niet alleen het actieve dossier) in één oogopslag kunnen zien of er (nieuwe) post is.
Je 1e reactie luidde:
Waar het fout gaat is vrij simpel: je gebruikt de functie bij het laden van het formulier... Wil je ook bij andere records een telling zien, dan moet je de functie dus bij een andere gebeurtenis zetten.
Ik kan geen andere gebeurtenis bedenken, jij?
 
aan aparte subform maken (heb alleen al 9 jaar niet meer met access gewerkt (2003) dus dat is mogelijk een stuk anders geworden).

Als je een lijst wil maken van alle "ID's" kun je die met een query resultaat en een loopje voor bovenstaande code redelijk eenvoudig verkrijgen. Het uitvoeren van de query en het invoegen van het resultaat moet dan wel in VBA. De VBA kant is niet heel uitdagend, maar het uitvoeren in access zelf is wat anders. Je moet ook rekening houden met de belasting van je harde schijf als deze query continue door veel mensen wordt uitgevoerd.

Een alternatief is om om de zoveel tijd een lijst te maken van de directories en deze waarde uit het geheugen te gebruiken of andere lage impact oplossing
 
Het is allemaal niet zo moeilijk, en al helemaal niet traag in het gebruik, ik gebruik zelf ook interactieve lijsten, maar ik denk dat je beter een voorbeeldje kan maken. Want ik vind het allemaal te vaag nog voor een specifieke oplossing.
Ik gebruik overigens keuzelijsten, geen subformulieren.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan