Skapa namnlista för aktiv arbetsbok
Visserligen har MS Excel en inbyggd funktion för att generera en namnlista men den ger inga möjligheter att snabbt gå till en namngivet cell eller cellområde (se Skapa namnförteckning).
Här demonstreras hur vi kan skapa en namnlista för aktiv arbetsblad och som har hyperlänkar till de namngivna cellområdena.
Se också:
Option Explicit
Sub Skapa_Namn_Lista()'© 2002 Alla rättigheter XL-Dennis
Dim rnOmrade As Range
Dim nNamn As Name
Dim lnNamn As Long, lnAntal As Long
'Kontroll om namn finns i arbetsboken.
For Each nNamn In ActiveWorkbook.Names
lnAntal = lnAntal + 1
Next nNamn
'Meddelande om arbetsboken saknar namn.
If lnAntal = 0 Then
MsgBox "Hittade inga namn.", vbInformation, "Skapa namnlista"
Exit Sub
End If
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
'Tar bort eventuell tidigare arbetsblad med namnlist och lägger til
'nytt arbetsblad.
On Error Resume Next
With ActiveWorkbook
.Sheets("Namnlista").Delete
.Sheets.Add
End With
On Error GoTo 0
'Formatering av det insatta nya arbetsbladet.
With ActiveSheet
.Name = "Namnlista"
.Cells(1, 1).Value = "Namn:"
.Cells(1, 2).Value = "Värde:"
.Cells(1, 3).Value = "Refererar till:"
With .Range("A1:C1")
.Font.Bold = True
.Font.ColorIndex = 10
.Font.Size = 10
End With
End With
'Loopar igenom namnkollektionen och skriver namnuppgifterna till
'arbetsbladet "Namnlista".
lnNamn = 2
For Each nNamn In ActiveWorkbook.Names
'Utskriftsområde ska inte visas i namnlistan
If nNamn.Name Like "*!Print_*" Then GoTo Fortsatt
ActiveSheet.Cells(lnNamn, 1).Value = nNamn.Name
ActiveSheet.Hyperlinks.Add _
Anchor:=ActiveSheet.Cells(lnNamn, 1), _
Address:="", _
SubAddress:=nNamn.Name
With ActiveSheet
With .Cells(lnNamn, 3)
.Value = "'" & nNamn.RefersTo
.InsertIndent 1
End With
End With
On Error Resume Next
Set rnOmrade = nNamn.RefersToRange
'Om namnet omfattar ett cellområde kan inget värde
'anges varför "Inget" ska anges istället för #Värdefel!
If rnOmrade.Cells.Count > 1 Then
ActiveSheet.Cells(lnNamn, 2).Value = "Inget"
Else
With ActiveSheet.Cells(lnNamn, 2)
.Value = nNamn.Value
.NumberFormat = rnOmrade.NumberFormat
End With
End If
On Error GoTo 0
lnNamn = lnNamn + 1
Fortsatt:
Next nNamn
Columns("A:C").EntireColumn.AutoFit
Columns("B").HorizontalAlignment = xlCenter
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub