Open snel je Excel bestanden

Voorbeeldbestanden bij dit artikel:
  • Snel Excel bestanden openen
  • De snelle toegang tot jouw bestanden

    Als jij op een gelijkaardige manier dan mij werkt, heb je typisch een heleboel bestanden op bijna dagelijkse basis nodig, of zelfs meerdere keren per dag. Je kan ze allemaal in 1 map opslaan, of je kan allemaal snelkoppelingen maken in 1 map naar diverse bestanden die ergens verspreid op de harde schijf staan.

    Met een macro kunnen we de toegang tot, en het openen van, verschillende Excel bestanden automatiseren:

    Het idee is dat we een letter of nummer geven aan elk bestand waartoe we snel toegang wensen. Of het nu bestanden zijn voor het bedrijf waarvoor je werkt, of bestanden voor persoonlijk gebruik, enz. Dan kunnen we in een kleine userform aangeven welke bestanden we willen openen. Sta mij toe de code te tonen en onder de code de uitleg te geven, het lijkt misschien redelijk veel code maar het is zeker begrijpbaar: de VBA code is eigenlijk niet zo heel lastig.

    Dim sInput                 As String
    
    
    Sub Open_My_Files()
    Set fso = CreateObject("scripting.filesystemobject") 'de bron map p = Environ("HO") & "\Wim\" 'vraag om invoer aan de gebruiker sInput = "" Input_To_Open_Files sInput = Replace(LCase(sInput), " ", "") For i = 1 To Len(sInput) sKarakter = Mid(sInput, i, 1) Select Case Case "a" 'het KPI dashboard voor het bedrijf - met wachtwoord c0 = p & "Finance\KPI_dashboard.xlsm" If fso.FileExists(c0) Then Workbooks.Open c0, , , , sKarakter Case "1", "&", "k" 'de kalender van de financiële afdeling c0 = p & "Finance\Departementskalender.xlsx" If fso.FileExists(c0) Then Workbooks.Open c0 Case "2", "é", "c" 'de contactgegevens van de collega's c0 = p & "Admin\Contactgegevens.xlsx" Case "3", """", "p" 'de productcataloog van het bedrijf c0 = p & "Admin\Productcataloog.xlsx" If fso.FileExists(c0) Then Workbooks.Open c0 Case "4", "'", "b" 'het boodschappenlijstje van de supermarkt c0 = p & "Persoonlijk\Boodschappen.xlsx" If fso.FileExists(c0) Then Workbooks.Open c0 End Select Next
    End Sub
    Private Sub Input_To_Open_Files()
    With New ufPassword .Caption = "Geef het wachtwoord in of de letters/nummers van de bestanden" .Show If Not .UserCancel Then sInput = .Password Unload ufPassword End With
    End Sub

    We hebben een userform nodig om de invoer van de gebruiker te capeteren, nl. de bestanden die men wenst te openen. Bijvoorbeeld, het zou a24 kunnen zijn als invoer. Dit betekent, volgens onze logica, dat de gebruiker 3 bestanden wil openen:

    • a staat voor het wachtwoord voor het eerste bestand (het KPI dashboard voor het bedrijf)
    • 2 staat voor het getal van het bestand dat men daarna wenst te openen (de contactgegevens van de collega's)
    • 4 staat voor het getal van het bestand dat men laatst wenst te openen (het boodschappenlijstje van de supermarkt)

    Mijn userform kan je downloaden bovenaan deze pagina. De andere code zal je moeten toevoegen middels copy/paste. Gewoonlijk voeg ik die code toe in mijn Persoonlijk.xlsb persoonlijke macro werkboek: zo heb ik steeds onmiddellijke toegang tot de macro en kan ik hem uitvoeren van zodra Excel actief is.

    Laten we nu even naar de code kijken. Eerst definieer ik het pad p wat een map is die heet "Wim" en die zich in een bepaalde map bevindt. Ik had even goed de map "D:\OneDrive" kunnen nemen, want dat is het eigenlijk ook wel, maar sinds ik van PC zou kunnen veranderen kies ik voor een twist hier. Ik gebruik een Windows "environmental variable" die ik "HO" noem (dat staat voor HOme), en die variabele verwijst naar "D:\OneDrive". Zodoende zullen een heel aantal van mijn toepassingen en tools op de computer de "HO" gebruiken, eerder dan het direct het pad "D:\OneDrive". Dat mag op dit moment voor jou misschien wat overbodig en overkill lijken, maar ik verzeker je dat je blij zal zijn wanneer je al jouw bestanden en applicaties (met code) moet verhuizen naar een computer waar je misschien geen D-schijf hebt en/of OneDrive niet in gebruik is of anders ingericht is. In mijn geval impliceert dit enkel het wijzigen van de inhoud van de "HO" environmental variable en dat is alles !

    Vervolgens roepen we de userform aan en laten we de gebruiker toe om invoer te doen. Dat is vrij rechttoe rechtaan zou ik zeggen. De invoer wordt gecapteerd in de module-level variabele die heet "sInput". We verwijderen eventuele spaties en zetten de tekst om naar kleine letters - indien van toepassing.

    Dan gaan we een lus maken over alle karakters die de gebruiker in de string "sInput" zette. Dat is dan meteen onze For... Next lus. Elk karakter wordt geëvalueerd om te matchen met een aantal mogelijkheden die we vastleggen:

    • is het karakter een "a", dan wenst de gebruiker de KPI dashboard file te openen, waarbij "a" ook het wachtwoord is voor het bestand.
    • is het karakter een "1" of een ampersand of een "c", dan wenst de gebruiker het eerste bestand te openen.
    • is het karakter een "2" of een "é" of een "d", dan wenst de gebruiker het tweede bestand te openen.
    • enzovoort.

    Wat zijn nu die andere rare karakters ? Dat doe ik om verschillende toetsenborden toe te laten. Het getal 1 op mijn (Azerty) toetsenbord zal ook matchen met de ampersand op een Querty toetsenbord. Het karakter "c" staat voor "kalender" ;-) Hetzelfde voor de andere combinaties die ik toelaat. Voel je zo vrij om de logica aan te passen voor jouw bestanden.

    Voor elk karakter dat matcht zullen we het pad definiëren voor het te openen bestand. Er is nog een finale check om te kijken of het bestand wel bestaat en als dat het geval is zal Excel VBA trachten het te openen. Elk karakter dat de gebruiker ingeeft en dat niet matcht met de lijst wordt genegeerd. Er worden geen foutboodschappen gegenereerd maar je zou dat nog kunnen toevoegen.

    Zo dat was alles ! Nu kan je in een handomdraai bijvoorbeeld jouw 7 meest gebruikte bestanden kunnen openen zonder enige poespas :-) Veel plezier!




    Homepage

    Rubriek onderdelen

    Over Wim

    Wim Gielis is Business Intelligence consultant en Excel expert

    Andere links