Sortera arbetsblad
I detta tips belyses ett flertal tekniker för att sortera arbetsbladen i en arbetsbok.
I första exemplet visas hur vi på ett okomplicerat sätt kan sortera arbetsbladen efter våra egna önskemål.
Option Explicit
Option Base 1
Sub Blad_Sortering_Enkel()
Worksheets("Test").Move After:=Worksheets("Tabeller")
Worksheets("Statistik").Move After:=Worksheets("Resultat")
End SubI nästa exempel belyses hur vi kan ta hjälp av cellvärden vid egen sortering, där respektive cell håller ett arbetsbladnamn. M a o, listan i arbetsbladet styr sorteringsordningen.
Sub Blad_Sortering_CellOmrade()
Dim rnOmrade As Range
Dim rnBladNamn As Range
Set rnOmrade = Worksheets("Startsida").Range("F3:F7")
For Each rnBladNamn In rnOmrade
Worksheets(rnBladNamn.Value).Move _
After:=Worksheets(Worksheets.Count)
Next rnBladNamn
End SubI vissa sammanhang kan det vara önskvärt att skapa en egen sorteringsordning mha en VBA-matris, där matrisen håller samtliga arbetsbladnamn. Exemplet nedan visar hur det kan ske på ett enkelt sätt.
Sub Blad_Sortering_Matris()
Dim vBladNamn As Variant
Dim i As Integer
vBladNamn = Array("Resultat", "Statistik", "Tabeller", "Test")
For i = 1 To UBound(vBladNamn)
Worksheets(vBladNamn(i)).Move After:=Worksheets(4)
Next i
End Sub
'Noterbart: Arbetsblad som finns i arbetsboken men som inte ingår i
'VBA-matrisen placeras före alla andra blad.Har vi stora arbetsböcker och där arbetsblad läggs till löpande måste en annan lösning till. Här kan vi dra nytta av att både skapa en lista i ett kalkylblad och skapa en VBA-matris.
Sub Blad_Sortering_Celler_Matris()
Dim vBladNamn As Variant
Dim rnOmrade As Range
Dim i As Integer
Set rnOmrade = Worksheets("Startsida"). _
Range("F3", Range("F3").End(xlDown))
'En en-dimensionell kalkylbladsmatris som är vertikal måste
'omvandlas till horisontell innan värdena kan läsas in
' i en VBA-matris.
vBladNamn = Application.WorksheetFunction.Transpose(rnOmrade)
For i = 1 To UBound(vBladNamn)
Worksheets(vBladNamn(i)).Move After:=Worksheets(5)
Next i
End Sub
I nästa exempel demonstreras hur arbetsblad kan sorteras stigande. Vill vi sortera åt andra hållet , dvs fallande sortering byter vi bara ut tecknet "<" mot ">".
Sub Sortera_Blad_Stigande()
Dim iAntalBlad As Integer
Dim i As Integer
Dim j As Integer
iAntalBlad = ActiveWorkbook.Worksheets.Count
For i = 1 To iAntalBlad
For j = i To iAntalBlad
If LCase(Worksheets(j).Name) < LCase(Worksheets(i).Name) Then_
Worksheets(j).Move before:=Worksheets(i)
End If
Next j
Next i
End Sub
Har vi både arbetsblad och t ex diagramblad i en arbetsbok, vilka vi vill sortera, måste en annan lösning till. Exemplet nedan visar en teknik för att sortera alla typer av blad i stigande ordning.
Sub Sortera_Alla_Bladtyper_Stigande()
Dim i As Integer
Dim j As Integer
For i = 1 To ActiveWorkbook.Sheets.Count
Sheets(i).Visible = True
For j = 1 To i - 1
If LCase(Sheets(j).Name) > LCase(Sheets(i).Name) Then
ActiveWorkbook.Sheets(i).Move _
Before:=ActiveWorkbook.Sheets(j)
Exit For
End If
Next j
Next i
End Sub