vrijdag 13 januari 2017

Hyperlink-macro


Een macro werkelijk opstarten door te klikken op een hyperlink is in Excel niet mogelijk. Wel kun je een cel een hyperlink meegeven en een macro laten controleren of er op een hyperlink wordt geklikt en dan acties uitvoeren.
Hoe dat werkt wordt hieronder aan de hand van een voorbeeld getoond.

Voorbeeld:
Een Excel-bestand bestaat uit twee werkbladen. Op het eerste werkblad "Product" staat een tabel met de namen van artiesten en de namen van hun albums.

Op het tweede werkblad "Verkoop" staat per album verkocht wie het heeft verkocht. Normaliter zou hier meer informatie staan maar voor deze macro is dit voldoende.

Zou het nu niet mooi zijn om aan de Producttabel een kolom toe te voegen met het aantal verkochte albums en dat je op het aantal dat getoond wordt als een hyperlink kunt klikken waarmee de Verkooptabel direct gefilterd wordt op de betreffende artiest en album?
Dat kan.
Maar niet zoals dat normaliter werkt met een hyperlink. In Excel kan geen macro aan een specifieke hyperlink gekoppeld worden. Wel kan in Excel gebruik gemaakt worden van een macro die alleen werkt als je op een hyperlink klikt.

Op werkblad "Product" wordt aan de tabel een derde kolom toegevoegd met daarin een formule die berekend hoeveel verkopen er zijn gedaan van de combinatie van artiest en album. De formule in deze derde kolom is:
=AANTALLEN.ALS(Verkooptabel[Artiest];[@Artiest];Verkooptabel[Album];[@Album])
 Aan elk getal in deze derde kolom wordt een hyperlink gekoppeld. Let op! Per cel moet een hyperlink aangemaakt worden. Dit kan niet in één keer voor de gehele kolom en een cel met formule en hyperlink kan niet omlaag gekopieerd worden want dan verwijst de hyperlink naar de verkeerde cel. De hyperlink moet per cel worden aangemaakt.
Macro's werken met cellen en niet met hyperlinks. En als cel A1 is geselecteerd en er wordt geklikt op een hyperlink in cel B2 dan is de actieve cel nog steeds cel A1. Daarom moet in de macro eerst geregeld worden welke cel bij de geselecteerde hyperlink hoort. En dat kan met de volgende macro:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)   
        mijnrij = Target.Range.Row
        Mijnkolom = Target.Range.Column
        Cells(mijnrij, Mijnkolom).Select
  End Sub


Nu bekend is in welke cel de hyperlink is aangeklikt, kan de macro uitzoeken welke artiest en welk album hier bij hoort en kan werkblad Verkoop worden gefilterd op deze gegevens.
Om te voorkomen dat de macro ook wordt gestart als in een andere kolom op het eerste werkblad een hyperlink wordt geplaatst, wordt de macro uitgebreid met een controle of de actieve kolom wel kolom 3 is.
De totale macro, die wordt vastgelegd bij het betreffende werkblad (en niet in een aparte module) ziet er als volgt uit:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
       
    Application.ScreenUpdating = False
        mijnrij = Target.Range.Row
        Mijnkolom = Target.Range.Column
        Cells(mijnrij, Mijnkolom).Select
        If Mijnkolom = 3 Then
            MijnArtiest = ActiveCell.Offset(0, -2).Text
            MijnAlbum = ActiveCell.Offset(0, -1).Text
            Blad6.Select
            If ActiveSheet.AutoFilterMode Then
                ActiveSheet.ShowAllData
            ElseIf ActiveSheet.FilterMode Then
                ActiveSheet.ShowAllData
            End If
           
            ActiveSheet.ListObjects("Verkooptabel").Range.AutoFilter Field:=1, Criteria1:=MijnArtiest
            ActiveSheet.ListObjects("Verkooptabel").Range.AutoFilter Field:=2, Criteria1:=MijnAlbum
           
        ElseIf Mijnkolom = 4 Then
'           Eventueel een formule voor een hyperlink in een andere kolom
        End If
        Application.ScreenUpdating = True

End Sub
Het voorbeeldbestand kun je HIER vinden.
En is iets niet duidelijk, stuur dan een berichtje via het contactformulier van mijn website.