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

j'essaie d'ajouter une feuille Excel avec le nom "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 me faire savoir pourquoi? merci

46
demandé sur Community 2013-12-20 10:33:35

8 réponses

essaye ceci:

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

Ou un With clause pour éviter d'appeler votre objet de façon répétée

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

ci-Dessus peut être simplifiée si vous n'avez pas besoin d'appel 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
104
répondu L42 2016-04-06 00:43:09

Veuillez utiliser cette seule ligne:

Sheets.Add(After:=Sheets(Sheets.Count)).Name = "new_sheet_name"
25
répondu Amar 2016-01-03 05:27:43

essaye ceci:

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
répondu Mr F 2014-10-07 13:13:46
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)

5
répondu Saptarshi 2015-09-14 08:01:50

Essayez d'utiliser:

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

Si vous voulez vérifier si une feuille avec 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 à partir de votre principal secondaire, par exemple:

Sub main

    funcCreateList "MySheet"

Exit Sub
2
répondu Ivan Tokarev 2016-03-23 10:27:09



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

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

merci,

1
répondu Developer 2016-11-15 19:04:29

Cela va vous donner la possibilité de:

  1. écrasez Ou conservez un onglet qui a le même nom.
  2. placez la feuille à la fin de tous les onglets ou à côté de l'onglet courant.
  3. Sélectionnez votre Nouvelle feuille ou 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
1
répondu moberme 2017-10-17 22:19:21

c'est un ajout simple et rapide d'un onglet nommé à la feuille de travail courante:

Sheets.Add.Name = "Tempo"
-3
répondu Jan 2015-10-22 19:05:11