Lägga till arbetsblad

 

Att lägga till arbetsblad borde rimligtvis inte vara något större problem, eller?

Att lägga till ett arbetsblad kan göras på två sätt:

Då Worksheets-samlingen (liksom Charts-samlingen) är en del av Sheets-samlingen så ingår worksheet-objektet i båda samlingarna och möjliggör därför skapandet av nya arbetsblad mha Sheets-samlingen

När något av dessa instruktioner körs så läggs ett nytt arbetsblad till arbetsboken före alla andra blad. 

Om vi vill lägga till blad efter det sista bladet så måste man specificera det i koden enligt följande:


Antag att det sista bladet i arbetsboken är ett diagramblad. Då kommer worksheets-kommandot att generera ett felmeddelande medan sheets-kommandot utför uppdraget.

Har vi både arbets- och diagramblad i arbetsboken och vi vill arbeta med arbetsbladens index kan problem uppstå. 


Ovanstående instruktion ger indexnumret i Sheets-samlingen och inte i Worksheets-samlingen som man skulle kunna tro. Undvik därför denna egenskap då det blir förvirrande och använd istället: 


Nedan demonstreras hur man kan lägga till en arbetsvecka (må - fre) i en arbetsbok. 

Om de namngivna arbetsbladen (må - fre) redan finns så går det inte att upprepa proceduren utan då uppstår det ett programkörningsfel (1004) - felhantering krävs därför.

För att kopiera ett arbetsblad används kommandot Copy - se nedanstående exempel.

Koden kan kopieras och klistras in direkt i en modul eller så du hämta ett exempel här.

För ytterligare information om att lägga till arbetsblad se: Kopiera arbetsblad

 

Sub Skapa_Arbetsvecka()
Dim i As Integer

'Enkel felhantering
On Error Resume Next

'Om inte ett arbetsblad är aktivt så meddela det och avsluta proceduren
If TypeName(Selection) <> "Range" Then
     MsgBox "Ett kalkylblad måste vara aktivt för att lägga till nya blad!",  _
     vbInformation, "Skapa arbetsvecka"
     Exit Sub
End If

Application.ScreenUpdating = False

'Lägger till fem arbetsblad och döper dessa till Må t om Fre 
For i = 1 To 5
   Sheets.Add After:=Sheets(Sheets.Count)
   ActiveSheet.Name = _
   Application.WorksheetFunction.Proper(Format(DateSerial(1, 1, i), "ddd"))
Next i

End Sub

Sub Kopiera_Blad()

Dim WsBlad As Worksheet
Dim i As Integer

If TypeName(Selection) <> "Range" Then
       MsgBox "Ett kalkylblad måste vara aktivt för att lägga till nya blad!", _
       vbCritical
       Exit Sub
End If

Application.ScreenUpdating = False

'Antal arbetsblad tilldelas variabeln
i = Worksheets.Count

'Kopierar det aktiva arbetsbladet och placerar det sist i arbetsboken.
ActiveSheet.Copy After:=Sheets(Sheets.Count)


'Räknar upp antal arbetsblad med 1 - (det nya arbetsbladet)
i = i + 1

'Det nya infogade arbetsbladets "nummer" tilldelas variabeln  
Set WsBlad = Worksheets(i)

On Error Resume Next

'Tömmer det nya infogade arbetsbladet på inmatade värden men
'behåller formler och text! 
WsBlad.Cells.SpecialCells(xlCellTypeConstants, 1).ClearContents

End Sub