wake-up-neo.com

Wie füge ich ein benanntes Blatt am Ende aller Excel-Blätter hinzu?

Ich versuche, eine Excel-Tabelle mit dem Namen "Temp" am Ende aller vorhandenen Tabellen hinzuzufügen, aber dieser Code funktioniert nicht:

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

Kannst du mich bitte wissen lassen warum?

63
Behseini

Versuche dies:

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

Oder verwenden Sie eine With -Klausel, um zu vermeiden, dass Ihr Objekt wiederholt aufgerufen wird

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

Das Obige kann weiter vereinfacht werden, wenn Sie im Rest des Codes nicht dasselbe Arbeitsblatt aufrufen müssen.

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

Bitte benutzen Sie diesen einen Liner:

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

(Wenn Sie ein Arbeitsblatt hinzufügen, ist es trotzdem das aktive Blatt.)

6
Saptarshi

Versuche dies:

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

Versuchen zu benutzen:

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

Wenn Sie prüfen möchten, ob bereits ein Blatt mit demselben Namen vorhanden ist, können Sie eine Funktion erstellen:

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

Wenn die Funktion erstellt wurde, können Sie sie von Ihrem Hauptsub aufrufen, z.

Sub main

    funcCreateList "MySheet"

Exit Sub
3
Ivan Tokarev

Dies gibt Ihnen die Möglichkeit:

  1. Überschreiben oder beibehalten Sie eine Registerkarte mit demselben Namen.
  2. Platzieren Sie das Blatt am Ende aller Registerkarten oder neben der aktuellen Registerkarte.
  3. Wählen Sie Ihr neues Blatt oder das aktive aus.

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


Versuchen Sie, die Reihenfolge Ihres Codes zu ändern. Sie müssen zuerst das Arbeitsblatt erstellen, um es benennen zu können.

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

vielen Dank,

1
Developer