Start » VBA-exempel för Excel | Effektiva lösningar på konkreta problem » Kalkylbladsstruktur » Skapa länklista till alla arbetsblad i Excelboken

Skapa länklista till alla arbetsblad i Excelboken





skapa-lankar-till-arbetsblad-i-excel

Om en Excelbok innehåller ett större antal blad (kanske hundratals) så kan det ibland vara praktiskt att skapa ett index, dvs en lista med länkar till samtliga arbetsblad.

Listan, som man t ex skapar på det vänstersta kalkylbladet, kommer att se ut som på bilden till vänster.

Koden, som loopar igenom alla arbetsblad,  innehåller även en programrad där du kan utesluta ett visst kalkylblad från att tas med i listan.

VBA-kod som skapar länkar till bokens kalkylblad

Utgångspunkten är en vanlig Excelbok med minst två arbetsblad. I denna arbetsbok skapar vi en modul i VBA-editorn, där nedanstående kod läggs in.

Sub Skapa_Lankar_Till_Alla_Kalkylblad()
 
Dim wrbBok As Workbook
Dim wrsAktivtBlad As Worksheet, wsBlad As Worksheet
Dim intRad, intKolumn As Integer
 
Set wrbBok = ActiveWorkbook
Set wrsAktivtBlad = ActiveSheet
 
'rad och kolumn där vi vill börja skriva ut länklistan
intRad = 4
intKolumn = 1
 
'slinga som går igenom alla kalkylblad
For Each wsBlad In wrbBok.Worksheets
 
'blad som vi vill utesluta från länklistan
If wsBlad.Name = "SheetAnteckningar" Then GoTo NastaBlad
 
'skapa länkarna
If wsBlad.Name <> wrsAktivtBlad.Name Then
 
wrsAktivtBlad.Hyperlinks.Add wrsAktivtBlad.Cells(intRad, _
intKolumn), "", SubAddress:="'" & wsBlad.Name & "'!A1", _
TextToDisplay:=wsBlad.Name
 
intRad = intRad + 1
End If
 
NastaBlad:
Next wsBlad
 
End Sub




17 kommentarer till “Skapa länklista till alla arbetsblad i Excelboken”

  1. Åsa

    Vilken bra instruktionsfilm! Lätt att följa och precis det jag letat efter. Men… jag får syntax fel. Det verkar vara något med raden: “If wsBlad.Name <> wrsAktivtBlad.Name Then”
    Jag saknar kunskap att kunna rätta till det som behövs.

  2. Åsa

    Det tycks som att den här raden inte heller funkar för mig: “wrsAktivtBlad.Hyperlinks.Add wrsAktivtBlad.Cells(intRad, _
    intKolumn), “”, SubAddress:=”‘” & wsBlad.Name & “‘!A1″, _
    TextToDisplay:=wsBlad.Name”

  3. Åsa

    Ps. när jag ändrade i Visual Basic så texten blev som det inkopierade är i mina frågor här ovan så funkade det! Dvs att jag bytte ut “&lt” till “<" osv.

  4. Åsa

    Nästa fråga: när jag tar bort en flik och kör om makrot så tar den fortfarande med den borttagna fliken i listan men om man klickar på länken så får man “ogiltig referens” (så klart). Hur gör man för att inte lista borttagna flikar?

  5. Åsa

    Inser att det går att lösa om man tar bort listan och kör makrot igen.

  6. Excelkungen

    Hej Åsa,

    Kul att du hade nytta av artikeln!

    Ja du kom ju själv på vad som var fel – vissa tecken (< ,>,& …) blir ibland lite knasiga när jag uppdaterar artiklar. Jag har justerat detta i koden ovan.

    Hälsningar Anders

  7. Robert Sjöberg

    Hej

    Jag måste säga att det är ett riktigt vra macro!

    En fråga bara går det att få macrot att importera listan med början i aktiv cell?

    MVH
    Robert

  8. Excelkungen

    Hej Robert, kul att gillar makrot.

    Ja visst, för att börja skriva ut listan i aktiv cell så byter du ut till:

    intRad = ActiveCell.Row
    intKolumn = ActiveCell.Column

    Hälsningar
    Anders
    ExcelKungen.com

  9. Stefan Wassenius

    Hej,

    jag undrar om man kan komplettera modulen med en kolumn (B) som innehåller länken i formatet: file://…. (som det ser u i mouse-over-funktionen och hur koden kan kompletteras för detta.

  10. Excelkungen

    Stefan,

    Då får du t ex lägga till följande kodrad:

    Cells(intRad, intKolumn + 1) = “file:///” & ActiveWorkbook.Path & ” – ‘” & wsBlad.Name & “‘” & “!A1″

    Placera den EFTER koden som slutar med “…TextToDisplay:=wsBlad.Name”

    /Anders
    ExcelKungen.com

  11. Stefan Wassenius

    Tack för hjälpen!!

  12. Erik

    Hej!

    Hur gör man så att makrot endast gör listan i ett enda kalkylblad?

    vänlig hälsning,

    Erik

  13. Per

    Hej, detta fungerar jättebra. Men hur gör jag om jag vill att länklistan ska börja på blad 3 och hoppa över både blad 1 och 2 och även blad exempelvis 7 och 8? Kan man även länka till dolda kalkylblad?

  14. Clara

    Hej!

    Superhärligt med intstruktionsvideo om steg för steg i detta. I min svenska excelversion (2013) har jag dock lite svårt att förstå vilken Develop-fliken är och att hitta ngt som heter eller motsvarar “visual basics”.Vet du?
    Tack på förhand för hjälpen!
    Mvh
    Clara

  15. Viktor

    Hej! 

     

    Jag körde makrot ovan men det förstörde mitt looken på mitt dokument.  Hur gör jag för att ta bort detta makrot? Mvh

    Viktor 

  16. Fredrik Brandt

    Hej,

    Kan man göra detta utan VBA?

    Kan man typ skapa en index-sida, sedan när man skapar en ny flik döpa dessa till 1, 2, 3 osv.

    I index-listan har man olika kolumner med uppgifter. När man sedan skapar en flik (man får väl kopiera från flik 1 eftersom denna blir mall) genereras automatiskt uppgifterna på flik-sidan (kanske låsta fält?) upp efter vilken flik du namngett den med.

    Skulle detta kunna göras?

    Mvh,

    /Fredrik.

  17. Helene

    Hej,

    Superbra video, men jag får inte med alla mina flikar.

    Vet du vad som kan vara fel?

    Tack på förhand!

    Mvh

    Helene

Lämna en kommentar