Bestanden in bulk verplaatsen naar verschillende doelmappen met Visual Basic for Applications (VBA)
Dit is een korte handleiding om grote hoeveelheden bestanden (ongeacht bestandstype) in bulk te verplaatsen naar één of verschillende doelmappen aan de hand van Excel en Visual Basic for Applications (VBA).
Auteur
Wouter De Witte
Context van het probleem
Het MMP1917 heeft voor elke persoon waarvan het museum objecten of gegevens bewaart een aparte map op de server. Deze mappen bevatten allerhande informatie in uiteenlopende bestanden (afbeeldingen, tekstbestanden, etc.). Tijdens het subsidieproject Inhaalbeweging Digitale Collectiedata worden alle personalia (= objecten met een directe relatie tot een persoon) gescand of gefotografeerd. Deze digitale moederbestanden (.tiff) worden bewaard in een specifieke map op de server.
Het is echter praktischer om de gebruiksbestanden (.jpg) in de mappen van hun gerelateerde personen te bewaren. Wanneer een publieksmedewerker of onderzoeker een foto nodig heeft, kan hij of zij deze bestanden in de map van deze persoon terugvinden. Het MMP1917 heeft één hoofdmap met de naam “personalia” op de server. Deze hoofdmap bevat submappen met een vaste naamgeving, namelijk “AchternaamVoornaam”. Vóór de start van deze oefening werden de TIF-bestanden via FastStone Image Viewer gekopieerd en getransformeerd naar JPG-bestanden.
Omschrijving van het probleem:
Het is mogelijk om alle afbeeldingen of bestanden gerelateerd aan een specifieke persoon manueel op te zoeken en te verplaatsen via Windows Verkenner. Je zoekt eerst de juiste doelmap op en verplaatst vervolgens de bestanden naar deze locatie.
Deze methode is echter onpraktisch en inefficiënt wanneer het om duizenden bestanden gaat.
De vraag is dus: hoe verplaats je duizenden bestanden automatisch naar verschillende doelmappen?
Er zijn verschillende oplossingen mogelijk. Het MMP1917 beschikt echter over een Excel-bestand met metadata over bestanden, hun huidige bewaarmappen en hun doelmappen. Deze metadata is voornamelijk afkomstig uit een DROID-scan (Exiftool werkt ook) en een Axiell export.
Oplossing
Voorbereiden van het Excel bestand.
Om te beginnen bevat het Excel-bestand bevat vijf basiskolommen.
- Kolom “A”: bestandsnaam (bv. “Afb_00001”)
- Kolom “B”: bestandsformaat (bv. “.tiff”, “.jpg”, etc.)
- Kolom “C”: bronmap (het pad naar de huidige map)
- Kolom “D”: bestemmingsmap (het pad naar de bestemmingsmap)
- Kolom “E”: de correcte submap in de bestemmingsmap
Aan de hand van deze informatie kunnen de volledige start- en eindbestandspaden gegenereerd worden.
- In kolom “F” plaatsen we het volledige pad naar het bestand in de bronmap. In cel E1 schrijf je de volgende functie: “=TEKST.SAMENV(C1;"\";A1;B1)”. Met andere woorden: bronmap, “\”, bestandsnaam en bestandstype.
- bv. C:\Users\WouterDeWitte\Bronmap\Afb_00001.jpg
- In kolom “G” plaatsen we het volledige pad naar het bestand in de bestemmingsmap. In cel F1 schrijf je de volgende functie: “=TEKST.SAMENV(D1;"\";E1;"\";A1;B1)”. Met andere woorden: bestemmingsmap, “\”, submap, “\”, bestandsnaam en bestandstype.
- bv. C:\Users\WouterDeWitte\Bestemmingsmap\Submap\Afb_00001.jpg
De VBA-code
Voor we verder gaan moet de “Ontwikkelaars-tab” aangezet worden in je Excel-document. Klik hiervoor op “Bestand” > “Opties” > “Lint aanpassen” > “Hoofdtabbladen” > “Ontwikkelaars” of bekijk dit filmpje. Eens dit voltooit is, verschijnt een nieuw tabblad “Ontwikkelaars” in je werklint. Om VBA-code in te voeren klik je op dit tabblad, gevolgd door “Visual Basic” > “Invoegen” > “Module”.
Plaats de volgende code in het tekstveld:
(Met dank aan ByteMarks (via excelforum.com))Sub Move()
Dim a$, b$, x$
On Error GoTo errHandler
For r = 2 To Range("A" & Rows.Count).End(xlUp).Row
a = Range("F" & r).Value
b = Range("G" & r).Value
Name a As b
x = "Succes"
skip:
Range("H" & r) = x
Next
Exit Sub
errHandler:
x = "Err " & Err.Description
On Error GoTo -1
On Error GoTo errHandler
GoTo skip
End Sub
Mogelijke aanpassingen
Is jouw Excel-document anders dan dit voorbeeld?
Dan kan je deze zaken in de code aanpassen:
- Verander “F” door de kolom die in jouw bestand het startbestandspad bevat.
- Verander “G” door de kolom die in jouw bestand het eindbestandspad bevat.
- Verander “H” door één der welke kolom, zolang deze kolom leeg is. Dit is de controlekolom (zie hieronder).
Klik vervolgens op de groene play-knop (Sub/UserForm uitvoeren) of F5.
Resultaat:
De bestanden worden van je bronmap naar de door jouw aangegeven bestemmingsmap verplaatst.
Afhankelijk van de hoeveelheid kan dit een tijdje duren. Soms lijkt het alsof je Excel-programma bevriest: dit is geen probleem, wees geduldig.
Als de verplaatsing gelukt is, creëert de code de nieuwe kolom “H” (de controlekolom). Als de opdracht succesvol is, wordt het woord “Succes” in deze kolom geplaatst. Als de verplaatsing mislukt krijg je een waarschuwing in deze kolom.
Organisatie
Licentie
- CC-BY-SA
Type
Deze pagina is laatst aangepast op 16 december 2022
Deze pagina aanvullen of corigeren?
Eiusmod ex minim officia eu sunt proident. Id culpa veniam id anim officia incididunt veniam excepteur cupidatat sit consectetur quis consequat. Incididunt proident commodo aliqua ipsum in duis dolore occaecat aute aliquip et pariatur velit. Cupidatat do et sunt labore.