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

gehele directory leegmaken via macro

Status
Niet open voor verdere reacties.

Gesus

Gebruiker
Lid geworden
6 okt 2006
Berichten
126
Hallo luitjes,

Ik wil graag een bepaalde directory (die in een cel in Excel staat) via commando's in een macro helemaal leegmaken. Er staan soms 3 maar soms ook wel 100 files (niet altijd excelfiles, maar dat maakt niets uit)

Dus bv in een cel A5 (genaamd "delete_directory") staat C:\temp. Via een macro moeten alle files die daarin staan dus gedeleted worden.

Bij voorbaat dank,

Gesus
 
Code:
Kill ("d:\prive\test1\*.*")
, waarbij d:\prive\test1 de map is.

Zie ook antwoord van Roncancio op je andere vraag
 
dank voor de snelle reactie, maar dit is niet wat ik bedoel


Kill ("d:\prive\test1\*.*") is niet flexibel genoeg. Omdat het niet altijd dezelfde directory is die gekilled moet worden heb ik in het excelfile cel(A1) een naam gegeven: delete_directory

In deze excel-cel kan ik dus een directory opgeven die gekilled moet worden. Zo voorkom ik dat ik telkens in de macro de directory moet aanpassen.

Maar mijn code Kill ("delete_directory*.*") werkt niet

p.s. de inhoud van de cel genaamd "delete_directory" is bv c:\Gesus\

Het macro commando moet dus een variabele hebben die in het excelfile wordt bepaald.

Thanx again!!

Gesus
 
zo?

Code:
Sub DeleteFiles()
Dim map
map = Range(["A1"]).Value
Kill (map + "\*.*")
End Sub
 
Hallo Gert, dit was het goede antwoord. Het combineren van een variabele uit excel en *.* gaat niet zo

Kill(map & "*.*") maar met het plus-teken
Kill(map + "*.*")

Thanx!

Maar kun je nu ook een routine hier omheen bouwen die eerst controleert of de directory leeg is? Als deze namelijk leeg is struikelt de macro hierover!

Thanx alvast!!

Gesus
 
De naam van de directory staat in cel A1.
Bijv.:
C:\Gesus\

Onderstaande code voegt de directory toe als deze nog niet bestaat.
Als de directory wel bestaat, gebeurt er niets.
Code:
Sub DirectoryToevoegen()

If Len(Dir(Range("a1").Value)) = 0 Then
    MkDir (Range("A1").Value)
End If

End Sub
Onderstaande code controleert of de directory leeg is.
Is dit niet het geval dan wordt deze eerst leeggemaakt.
Vervolgens wordt de directory verwijderd.
Code:
Sub DirectoryVerwijderen()
Dim sPad As String
Dim oBZ As Object
    
    sPad = Range("A1").Value
    Set oBZ = Application.FileSearch
    With oBZ
        .LookIn = sPad
        .Execute
        If .FoundFiles.Count > 0 Then
            Kill Range("A1").Value & "*.*"
        End If
    End With

    If Len(Dir(Range("a1").Value)) = 0 Then
        RmDir (Range("A1").Value)
    End If

End Sub

Met vriendelijke groet,


Roncancio
 
Sommige dingen zijn ingebouwd in VBA.

Kontrole of een directory bestaat, en zo ja verwijder:

Code:
If Dir([A1],16)<>"" then rmdir [A1]

kontrole of een directory bestanden bevat, en zo ja verwijder

Code:
If Dir( [A1] & "*.?*")<>"" then kill [A1] & "*.?*"

verwijderen van een directory met inhoud

Code:
With createobject("scripting.filesystemobject")
  If .folderexists([A1]) then .deletefolder [A1]
End with



De methode filesearch bestaat niet meer in Office2007.
Gebruik geen haakjes bij rmdir en kill
dir("*.*") geeft ook een parentdirectory als resultaat (die kan niet verwijderd worden met kill.
 
Laatst bewerkt:
Helaas....

Het verwijderen van bestanden gaat geweldig, maar hoe ik de tekst om de lege directory te verwijderen ook aanpas, het verwijderen van de directory lukt niet.:confused:
Ook niet het aanmaken van de directory.:confused:

Ik denk dat ik dit onderdeel maar niet ga meenemen in de macro.

Veel dank voor de vele reacties.:thumb:

Gesus
 
Het verwijderen van bestanden gaat geweldig, maar hoe ik de tekst om de lege directory te verwijderen ook aanpas, het verwijderen van de directory lukt niet.:confused:
Ook niet het aanmaken van de directory.:confused:

Misschien een probleem met je Windows rechten om directories aan te maken en te verwijderen (niet de nodige permissies)?
 
Hoi Finch,

Bedankt voor je reactie.
Ik heb de rechten wel, want ik kan handmatig directory's aanmaken, files erin zetten, deze files weer deleten en de zelf aangemaakte directory weer deleten.
Het deleten van files via de diverse oplossingen in een macro lukt fantastisch, maar als ik dan hetzelfde pad daarna wil deleten, gaat dat niet. Mogelijk omdat dit pad een variabele is in de macro die ik van tevoren heb gedeclareerd? Dit declareren gaat via een cel uit de file die ik een naam gegeven heb. Cel A1 heet dan bv "dir_opslaan" en kent de inhoud C:\gesus\20081013\. In de macro declareer ik deze als volgt:

Sub Start_conversie()

Calculate

Dim ophalen_pc As Integer
Dim ophalen_versie As Integer

‘ Hieronder declareer ik alle variabelen uit het Excel-file die ik dan gebruik voor de
' besturing van deze macro

startregel_pc = Range("startregel_pc").Value
eindregel_pc = Range("eindregel_pc").Value
startregel_versie = Range("startregel_versie").Value
eindregel_versie = Range("eindregel_versie").Value
dir_template = Range("dir_template").Text
naam_template = Range("naam_template").Text
dir_opslaan = Range("dir_opslaan").Text
naam_opslaan = Range("naam_opslaan").Text


ChDrive "G"

' Hieronder wordt eerst de directory "dir_opslaan" leeggemaakt (dit lukt)
' waarna de directory wordt verwijderd, hetgeen echter niet lukt!

Dim sPad As String
Dim oBZ As Object

sPad = Range("dir_opslaan").Value
Set oBZ = Application.FileSearch
With oBZ
.LookIn = sPad
.Execute
If .FoundFiles.Count > 0 Then
Kill Range("dir_opslaan ").Value & "*.*"
End If
End With

‘ na het Then commando stopt de macro en maakt de regel geel

If Len(Dir(Range("dir_opslaan ").Value)) = 0 Then
RmDir (Range("dir_opslaan ").Value)
End If


Ik weet helaas niet meer wat er nu moet gebeuren. In een soorgelijke sessie kan ik ook niet met MkDir een nieuwe directory aanmaken..

Misschien weet jij iets????

met vriendelijke groet,
Gesus
 
Een paar opmerkingen:

*Je gebruikt in je code beide variabelen door elkaar terwijl ze identiek moeten zijn.
Range("dir_opslaan").Value en Range("dir_opslaan ").Value. (Verschil de spatie achter opslaan.)
Ik hoop dat het eerder om een typfout gaat. Ofwel gaat het hier om 2 verschillende naamgevingen en begrijp ik de gedachtengang hierachter niet.

*Jij gebruikt de rmdir functie zo: rmdir(path) terwijl ik ze meestal zo gebruik rmdir path (zonder de haakjes). Beide 'versies' werken hier, heb ik getest. Maar aangezien de versie met haakjes blijkbaar niet werkt bij u zou ik eens proberen zonder de haakjes.
dus: RmDir Range("dir_opslaan ").Value (evt. de spatie verwijderen cfr. opmerking 1 :) )
Moest dat niet werken kan je ook eens een variabele als string declareren en daar de waarde van de range("dir_opslaan") in plaatsen, en deze gebruiken in de rmdir functie. Misschien helpt dat.

*Je maakt gebruik van FileSearch in je code. Weet wel dat deze constructie in Excel 2007 niet meer ondersteund is, en dat je daarvoor moet teruggrijpen naar je de dir functie. Gaat het niet de bedoeling zijn deze code te gebruiken onder Excel 2007, ga je geen enkel probleem kennen.

*Als ik ook nog even mag muggenziften. Je stelt het volgende in je commentaar regels:
Code:
‘ Hieronder declareer ik alle variabelen uit het Excel-file die ik dan gebruik voor de
' besturing van deze macro

startregel_pc = Range("startregel_pc").Value
eindregel_pc = Range("eindregel_pc").Value
startregel_versie = Range("startregel_versie").Value
eindregel_versie = Range("eindregel_versie").Value
dir_template = Range("dir_template").Text
naam_template = Range("naam_template").Text
dir_opslaan = Range("dir_opslaan").Text
naam_opslaan = Range("naam_opslaan").Text

Dat is niet de variabelen declareren, maar ze initialiseren. Declareren is bv. de regel Dim ophalen_pc As Integer. Bij de declaratie geef je aan welk type je variabele is (hier: integer). Hierboven initialiseer je, dwz je geeft ze een (initiële) waarde, met name de inhoud van een cel.
Uiteraard heeft dat woorgebruik geen invloed op de werking van je code, maar gaf het gewoon even ter info mee.
 
Hallo Finch,

Nogmaal dank voor de vele tijd die je erin stopt. De spatie was inderdaad een type-fout in dit bericht en gelukkig niet in de macro.:confused:
Helaas werken de andere genoemde mogelijke oplossingen niet. Ook niet als ik niet een naamvariabele in bv RmDir gebruik maar het volledige pad als tekst.

Ik zal dus ongetwijfeld iets fout doen, maar kan verder ook niets meer ontdekken.
Nogmaals dank voor de tijd die je erin hebt gestopt.

Met vriendelijke groet,
Gesus
 
Is er een mogelijkheid om een klein voorbeeldbestandje toe te voegen?

Bijgevoegd mijn bestandje dat c:\test1\ doet verwijderen.
Werkt dit bestandje?
 

Bijlagen

Je bent toch ook zeker dat er geen verborgen bestanden in die dir zijn achtergebleven?
Dat kan je checken in de verkenner waar je bij de opties aangeeft dat je verborgen bestanden wilt zien (staat standaard uitgeschakeld).
 
Al die variabelen zijn volstrekt overbodig.
chdir is dat eveneens.
Het is ook handig als je filesearch aangeeft naar welke bestanden gezocht moet worden.
de onderstaande code doet waar jij een veelvoud aan code voor nodig hebt

Code:
With application.filesearch
  .lookin=Range("dir_opslaan").Value
[COLOR="Red"]  .filename="*.*"[/COLOR]
  if .execute >0 then kill .lookin & "*.*"
End with

Als je ook de map wil verwijderen kan het ook met de oneliner

Code:
With createobject("scripting.filesystemobject")
  If .folderexists(Range("dir_opslaan").Value) then .deletefolder Range("dir_opslaan").Value
End with

en met de code die ik je al eerder gaf
Code:
With createobject("scripting.filesystemobject")
  If .folderexists(Range("A1")) then .deletefolder Range("A1")
End with
 
Laatst bewerkt:
Hallo allemaal!

Wat een reacties en voor het verwijderen van de files genoeg tips om dit werkbaar te krijgen.

Dank aan allen!!

Gesus
:thumb: :thumb: :thumb: :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan