web-dev-qa-db-fra.com

Comment ajouter une feuille nommée à la fin de toutes les feuilles Excel?

J'essaie d'ajouter une feuille Excel nommée "Temp" à la fin de toutes les feuilles existantes, mais ce code ne fonctionne pas:

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

Pouvez-vous s'il vous plaît laissez-moi savoir pourquoi?

63
Behseini

Essaye ça:

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

Ou utilisez une clause With pour éviter d'appeler plusieurs fois votre objet.

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

Ce qui précède peut être encore simplifié si vous n'avez pas besoin d'appeler sur la même feuille de calcul dans le reste du code.

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

Veuillez utiliser cette doublure:

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

(quand vous ajoutez une feuille de travail, de toute façon ce sera la feuille active)

6
Saptarshi

Essaye ça:

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
5
Mr F

Essayez d'utiliser:

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

Si vous souhaitez vérifier si une feuille portant le même nom existe déjà, vous pouvez créer une fonction:

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

Lorsque la fonction est créée, vous pouvez l’appeler depuis votre sous-traitant principal, par exemple:

Sub main

    funcCreateList "MySheet"

Exit Sub
3
Ivan Tokarev

Cela vous donnera la possibilité de:

  1. Écraser ou conserver un onglet portant le même nom.
  2. Placez la feuille à la fin de tous les onglets ou à côté de l'onglet en cours.
  3. Sélectionnez votre nouvelle feuille ou celle active.

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
2
moberme


Essayez de changer l’ordre de votre code. Vous devez d'abord créer la feuille de travail pour pouvoir la nommer.

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

merci,

1
Developer