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:
- Worksheets.Add
- Sheets.Add
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:
- Worksheets.Add After:=Worksheets(Worksheets.Count)
- Sheets.Add After:=Sheets(Sheets.Count)
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å.
- Worksheets("Blad5").Index
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:
- Sheets("Blad5").Index
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 IfApplication.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 iEnd 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