Dobbeltklik-makro som alternativ til hyperlinks i Excel
Denne side beskriver, hvordan dobbeltklik på en celle kan erstatte hyperlinks til at navigere mellem celler, faneblade og regneark.
Hyperlinks er smarte, hvis man har store og uoverskuelige regneark, hvor man gerne vil kunne hoppe fra ét sted til et andet ved at klikke på et link.
Men hyperlinks har også ulemper. Skal man lave mange, tager det lang tid, og indsætter man en række eller en kolonne i destinationsarket, går der koks i det, medmindre hyperlinket er til et navngivet område.
Herunder beskrives, hvordan man ved at dobbeltklikke på en celle kan hoppe til en anden celle med identisk indhold, skifte faneblad eller aktivere/åbne et andet regneark - ganske som med hyperlinks.
Fidusen er at benytte sig af fanebladets eller projektmappens BeforeDoubleClick-event, der kører helt automatisk, når man dobbeltklikker. Mere herom senere.
Du kan markere makroerne med musen, kopiere dem (CTRL+C) og sætte dem ind (CTRL+V) i Excels VBA-editor. Hvis din skærm er lille, kan nogle af kodelinjerne være ombrudte, men når du sætter det kopierede ind i et VBA-modul, er linjeskiftene OK.
Du kan også downloade en zipkomprimeret fil med 3 regneark med eksempler på nedenstående. De 2 af regnearkene, Test1 og Test2, indeholder ingen makroer og er bare med for at vise, hvordan de kan åbnes ved dobbeltklik på en celle.
Hop til celle med identisk indhold
Forestil dig, at du har et regneark med 20 faneblade om forskellige varer, og at kolonne E på de første 19 indeholder firmanavne på leverandører, mens det sidste er en alfabetisk oversigt over samtlige leverandører incl. kontaktinformation.
Når du klikker på et leverandørnavn i et af de første 19 faneblade, skal cursoren automatisk hoppe til den rette celle i fanebladet med oversigten og kontaktinformation.
Til det formål kan man bruge hyperlinks, men hvis man i fanebladet med kontaktinformation indsætter en række med en ny leverandør, går der kuk i hyperlinksene, medmindre de er til navngivne celler.
Dette kan løses meget nemmere ved at bruge fanebladenes eller projektmappens BeforeDoubleClick-event og tilføje lidt kode. Højreklik på fanen forneden (fx "Ark1"), vælg "Vis programkode" og indsæt følgende:
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
If Len(Target.Value) = 0 Or Target.Column <> 5 Then Exit Sub
Module1.FindName Target.Value
End Sub
I det tænkte eksempel skal koden indsættes i kodearket for alle 19 faneblade, og er man doven, nøjes man i stedet med at indsætte følgende i projektmappens (regnearket som indeholder fanebladene) kodeark, som kører, uanset hvilket faneblad der dobbeltklikkes på.
Det har også den fordel, at det også virker for evt. nye faneblade, som man tilføjer senere.
Projektmappens kodeark finder du ved at åbne VBA-editoren (ALT+F11) og åbne Project Explorer under "View" (hvis den da ikke er åben). Projektmappen er "ThisWorkbook".
Private Sub Workbook_SheetBeforeDoubleClick _
(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Len(Target.Value) = 0 Then Exit Sub
If ActiveSheet.Name = "Contact Data" Then Exit Sub
If Target.Column <> 5 Then exit Sub
Module1.FindName Target.Value
End Sub
Nu er det tid at indsætte et modul med den makro, som finder cellen med firmanavnet i fanebladet "Contact Data". Proceduren ser således ud:
Sub FindName(ByVal sName As String)
Dim rColumn As Range
Dim rFind As Range
Worksheets("Contact Data").Activate
Set rColumn = Columns("A:A")
Set rFind = rColumn.Find(sName)
If Not rFind Is Nothing Then
rFind.Activate
Else
Range("A1").Activate
End If
Set rColumn = Nothing
Set rFind = Nothing
End Sub
Hop til et andet faneblad
Den er helt enkel - makroen hopper til det faneblad, hvis navn står i cellen, der dobbeltklikkes på. I eksemplet her stilles dog som betingelse, at det skal være dobbeltklik i kolonne C. Her er det kode til et enkelt faneblad:
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
If Len(Target.Value) = 0 or Target.Column <> 3 Then Exit Sub
On Error Resume Next
Worksheets(Target.Value).Activate
End Sub
Vi er nødt til at skrive "On Error Resume Next", da der udløses en fejl, hvis cellens indhold ikke matcher navnet på et faneblad.
Hop til eller åbn et andet regneark
Dobbeltklik på en celle kan også hoppe til et andet regneark, hvis cellen indeholder navnet på regnearket. Eksemplet herunder kræver, at cellen, der dobbeltklikkes på, befinder sig i kolonne A, og at det andet regneark ligger i samme katalog.
Cellen skal indeholde regnearkets "fornavn", som i dette tilfælde er "Test1". Filnavnets endelse (fx .xls) skal ikke med.
Som før skal vi skrive noget i fanebladets BeforeDoubleClick event, og så skal vi have et par makroer i Module1. Først fanebladets BeforeDoubleClick event:
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
If Len(Target.Value) = 0 Or Target.Column <> 1 Then Exit Sub
Module1.ActivateWorkbook Target.Value
End Sub
I Module1 skal vi have en procedure og en function. Først proceduren:
Sub ActivateWorkbook(ByVal sWbName As String)
On Error GoTo ErrorHandle
If BookIsOpen(sWbName) Then
Workbooks(sWbName).Activate
Else
If Len(Dir(ThisWorkbook.Path & "\" & sWbName & ".xl*")) > 0 Then
Workbooks.Open (sWbName)
Else
MsgBox "Workbook " & sWbName & " findes ikke i " & _
ThisWorkbook.Path
End If
End If
Exit Sub
ErrorHandle:
MsgBox Err.Description & " Procedure ActivateWorkbook, Module1"
End Sub
Og så funktionen, som tjekker, om regnearket er åbent:
Function BookIsOpen(sWbName As String) As Boolean
On Error Resume Next
BookIsOpen = Len(Workbooks(sWbName).Name)
End Function
Det var det: Eksempler på hvordan man kan "hoppe" eller navigere i og mellem regneark ved at dobbeltklikke på en celle.
Der er mange andre muligheder - cellen, man dobbeltklikker på, kunne fx blive rød, gul eller blå, eller teksten kunne formateres på en bestemt måde. Det kan egentlig koges ned til, at bestemte hændelser - Events - i et regneark automatisk kan køre makroer, uden at man skal klikke på knapper eller menuer.
Der er andre Events tilknyttet et regneark. Du kan se hvilke, hvis du fx højreklikker på et faneblads fane og vælger "Vis programkode". Så åbner VBA-editoren, og du klikker på ComboBoxen foroven til venstre, hvor der står (General) og vælger "Worksheet".
Relateret
|