Bestanden verwijderen

Voorbeeldbestanden bij dit artikel:
  • Bestanden verwijderen
  • Inleiding

    Nu we weten hoe we bestandseigenschappen kunnen instellen (zie Bestandseigenschappen), kunnen we ook eens kijken naar VBA-code om bestanden van de harde schijf te verwijderen. We zullen in wat volgt bestanden uit een map (en/of uit submappen daarvan) verwijderen als ze voldoen aan criteria. Bijvoorbeeld: Excelbestanden uit een map verwijderen, of .TMP-bestanden (die zijn tijdelijk en mag je verwijderen), …

    VBA-code

    Bovenaan de pagina staat een bestandje met alle code, waarvan een deel ook op deze pagina te zien is.

    Met de eerste code hieronder kan je ineens alle Excelbestanden uit een map en submappen verwijderen. De map duid je zelf aan wanneer erom gevraagd wordt. Wil je niet in submappen zoeken, zet SearchSubFolders dan op False ipv. True. Kijk ook bij FileType om de code heel eenvoudig uit te breiden naar andere bestandstypes, bijvoorbeeld alle Office bestanden in een map.

    Option Explicit
    
    
    Sub ExcelBestandenDeleten()
    ' Wim Gielis ' http://www.wimgielis.com
    ''''' ' Custom module to delete all Excel files in a chosen folder ' 18/05/07 '''''
    Dim lCount As Long Dim strMap As String On Error Resume Next With Application.FileDialog(msoFileDialogFolderPicker) .Show strMap = .SelectedItems(1) End With With Application.FileSearch .NewSearch .LookIn = strMap .SearchSubFolders = True .FileType = msoFileTypeExcelWorkbooks If .Execute > 0 Then For lCount = 1 To .FoundFiles.Count Kill .FoundFiles(lCount) Next End If End With On Error GoTo 0
    End Sub

    Bekijk ook eens de .LastModified eigenschap, om bijvoorbeeld enkel bestanden van de laatste week of maand te verwijderen. Nu, ik gebruik zelf analoge code om regelmatig eens de .SQM-bestanden uit de C:-schijf te verwijderen. Dat zijn bestanden die aangemaakt worden wanneer je MSN Messenger gebruikt. De code zit in het bestandje. De verschilpunten en nieuwigheden in vergelijking met de code hierboven, zijn in deze code:

        Const strMap As String = "C:\"
        .FileType = msoFileTypeAllFiles
        .Filename = "*.sqm"
        SetAttr .FoundFiles(lCount), vbNormal
    

    Voortbouwen

    We kunnen verder gaan met analoge code, om eens de bestanden in de Temporary files folder te bekijken en eventueel deleten. Vooral .TMP-bestanden kunnen nogal talrijk zijn. Ook bevinden er zich in mijn tijdelijke map veel Excelbestanden, aangezien die daar terecht komen als ik op een forum een bestand download. Die stapelen zich op in aantal (ze zijn wel klein in omvang), en geregeld eens die map opkuisen kan geen kwaad. Integendeel.

    Natuurlijk gaan we dit niet manueel doen. Hier is code om alle Excel (.xls), Word (.doc), Zip (.zip) en tijdelijke (.tmp) bestanden te verwijderen uit de tijdelijke map van de gebuiker. Nu, eerst is er al de taak om de locatie van die map te zoeken. Die kan per computer en per gebruiker verschillen. Als ik MsgBox Environ("TEMP") zou uitvoeren, dan krijg ik C:\Documents and Settings\Wim\Local Settings\Temp. Je vindt de locatie met Environ("TEMP"). Dit wetende, moeten we vervolgens nog een lus door de 4 verschillende bestandstypes maken (zie de For…Next structuur met de variabele i). De rest van de code is gelijkaardig aan die hierboven:

    Option Explicit
    
    
    Sub TEMPfolderOpkuisen()
    ' Wim Gielis ' http://www.wimgielis.com
    ''''' ' Custom module to delete specified file types ' from the Temporary Files Folder ' 18/05/07 '''''
    Dim lCount As Long Dim i As Integer On Error Resume Next For i = 1 To 4 With Application.FileSearch .NewSearch .LookIn = Environ("TEMP") .SearchSubFolders = True .FileType = msoFileTypeAllFiles .Filename = Choose(i, "*.xls", "*.doc", "*.zip", "*.tmp") .LastModified = msoLastModifiedAnyTime If .Execute > 0 Then For lCount = 1 To .FoundFiles.Count SetAttr .FoundFiles(lCount), vbNormal Kill .FoundFiles(lCount) Next End If End With Next On Error GoTo 0
    End Sub

    Noot: bestanden die op dat moment nog in gebruik zijn door de computer, kan je niet verwijderen. Als je dat toch probeert, krijg je een foutmelding (die we negeren met On Error Resume Next).

    Chip’s site

    Als laatste geef ik nog eens een verwijzing naar een pagina van de schitterende website van Chip Pearson. Er is code om een map leeg te maken of code om alle bestanden naar de Prullenbak te sturen of ineens te verwijderen. Probeer misschien eens code van hem aan te passen om de gehele map "Temporary Internet Files" te legen. Of om met behulp van FileSearch in een Excel werkblad onder elkaar alle bestanden uit een map en diens submappen weer te geven. Let wel op: vanaf Excel 2007 is Application.FileSearch niet meer bruikbaar: het werd door de programmeurs uit Excel gehaald. Zo, nu weten jullie dus ook weeral hoe je je harde schijf wat op orde kan houden… met VBA!




    Over Wim

    Wim Gielis is Business Intelligence consultant en Excel expert

    Andere links