Hoe voeg ik een benoemd blad toe aan het einde van alle Excel-bladen?

Ik probeer een Excel-blad met de naam “Temp” toe te voegen aan het einde van alle bestaande bladen, maar deze code werkt niet:

Private Sub CreateSheet()
    Dim ws As Worksheet
    ws.Name = "Tempo"
    Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
End Sub

Kun je me alsjeblieft laten weten waarom?


Antwoord 1, autoriteit 100%

Probeer dit:

Private Sub CreateSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add(After:= _
             ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws.Name = "Tempo"
End Sub

Of gebruik een With-clausule om te voorkomen dat uw object herhaaldelijk wordt aangeroepen

Private Sub CreateSheet()
    Dim ws As Worksheet
    With ThisWorkbook
        Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        ws.Name = "Tempo"
    End With
End Sub

Bovenstaande kan verder worden vereenvoudigd als u niet hetzelfde werkblad in de rest van de code hoeft aan te roepen.

Sub CreateSheet()
    With ThisWorkbook
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "Temp"
    End With
End Sub

Antwoord 2, autoriteit 25%

Gebruik alstublieft deze oneliner:

Sheets.Add(After:=Sheets(Sheets.Count)).Name = "new_sheet_name"

Antwoord 3, autoriteit 4%

ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "XYZ"

(wanneer je een werkblad toevoegt, is dit sowieso het actieve werkblad)


Antwoord 4, autoriteit 3%

Probeer dit:

Public Enum iSide
iBefore
iAfter
End Enum
Private Function addSheet(ByRef inWB As Workbook, ByVal inBeforeOrAfter As iSide, ByRef inNamePrefix As String, ByVal inName As String) As Worksheet
    On Error GoTo the_dark
    Dim wsSheet As Worksheet
    Dim bFoundWS As Boolean
    bFoundWS = False
    If inNamePrefix <> "" Then
        Set wsSheet = findWS(inWB, inNamePrefix, bFoundWS)
    End If
    If inBeforeOrAfter = iAfter Then
        If wsSheet Is Nothing Or bFoundWS = False Then
            Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = inName
        Else
            Worksheets.Add(After:=wsSheet).Name = inName
        End If
    Else
        If wsSheet Is Nothing Or bFoundWS = False Then
            Worksheets.Add(Before:=Worksheets(1)).Name = inName
        Else
            Worksheets.Add(Before:=wsSheet).Name = inName
        End If
    End If
    Set addSheet = findWS(inWB, inName, bFoundWS)         ' just to confirm it exists and gets it handle
    the_light:
    Exit Function
    the_dark:
    MsgBox "addSheet: " & inName & ": " & Err.Description, vbOKOnly, "unexpected error"
    Err.Clear
    GoTo the_light
End Function

Antwoord 5, autoriteit 2%

Probeer te gebruiken:

Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "MySheet"

Als u wilt controleren of er al een blad met dezelfde naam bestaat, kunt u een functie maken:

Function funcCreateList(argCreateList)
    For Each Worksheet In ThisWorkbook.Worksheets
        If argCreateList = Worksheet.Name Then
            Exit Function ' if found - exit function
        End If
    Next Worksheet
    Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = argCreateList
End Function

Als de functie is gemaakt, kun je deze aanroepen vanuit je hoofdsub, bijvoorbeeld:

Sub main
    funcCreateList "MySheet"
Exit Sub

Antwoord 6

Dit geeft je de mogelijkheid om:

  1. Een tabblad met dezelfde naam overschrijven of behouden.
  2. Plaats het blad aan het einde van alle tabbladen of naast het huidige tabblad.
  3. Selecteer je nieuwe blad of het actieve blad.

Call CreateWorksheet("New", False, False, False)
Sub CreateWorksheet(sheetName, preserveOldSheet, isLastSheet, selectActiveSheet)
  activeSheetNumber = Sheets(ActiveSheet.Name).Index
  If (Evaluate("ISREF('" & sheetName & "'!A1)")) Then 'Does sheet exist?
    If (preserveOldSheet) Then
      MsgBox ("Can not create sheet " + sheetName + ". This sheet exist.")
      Exit Sub
    End If
      Application.DisplayAlerts = False
      Worksheets(sheetName).Delete
    End If
    If (isLastSheet) Then
      Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheetName 'Place sheet at the end.
    Else 'Place sheet after the active sheet.
      Sheets.Add(After:=Sheets(activeSheetNumber)).Name = sheetName
    End If
    If (selectActiveSheet) Then
      Sheets(activeSheetNumber).Activate
    End If
End Sub

Antwoord 7

Probeer de volgorde van je code te veranderen. U moet eerst het werkblad maken om het een naam te geven.

Private Sub CreateSheet()
    Dim ws As Worksheet
    Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
    ws.Name = "Tempo"
End Sub

bedankt,


Antwoord 8

Dit is een snelle en eenvoudige toevoeging van een benoemd tabblad aan het huidige werkblad:

Sheets.Add.Name = "Tempo"

Other episodes