Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Prüfen ob der Blattname schon vorhanden ist

Prüfen ob der Blattname schon vorhanden ist
24.07.2019 15:40:18
Donna
Einen schönen Nachmittag!
Ich habe mal wieder ein kleines Problem mit meiner Prozedur.
Ihr grober Aufbau:
Aus einer Excel-Tabelle (genannt Variante1) werden Daten in ein anderes Excel-Dokument (genannt Formulare) übertragen.
Vor der Übertragung öffnet die Prozedur das Dokument "Formulare", kopiert das erste Tabellenblatt (genannt Vorlage) und hängt es hinten an.
Dann kopiert er den Namen der in der Tabelle "Variante1" in der letzten beschriebenen Zelle von Spalte A steht.
Diesen Namen fügt er als Blattnamen des neu eingefügten Tabellenblattes im Dokument "Formulare" ein.
Danach erstellt er von diesem Tabellenblatt ein PDF-Dokument, speichert das Dokument "Formulare" ab und schließt es wieder.
Zum Schluss ist man wieder in der Ausgangsdatei und in der Tabelle "Variante1" und kann die nächste Zeile beschreiben.
Bis dahin hat alles mehr als super funktioniert und ich war richtig stolz.
Dann kam mir der Gedanke, dass so ein Lieferantenname auch mehrfach auftreten kann und es doch schön wäre, wenn die Prozedur dann nicht abbrechen würde, sondern nach einem neuen Namen fragt und diesen gleich einträgt.
Ich hab versucht das umzusetzen, aber die Prozedur will nicht so recht meine Vorstellungen umsetzen.
Folgendes hab ich mir ausgedacht:
dim a as string
For a = 1 To Sheets.Count
If Sheets(a).Name = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Variante1").Range("A" & LZa) = True Then
ActiveSheet.Name = InputBox("Der Tabellenname ist bereits vergeben. Bitte tragen Sie hier einen neuen ein:")
Else
ActiveSheet.Name = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Variante1").Range("A" & LZa)
End If
Next
Wenn ich die Prozedur mit diesem Extra durchlaufen lassen will und mit Absicht einen Namen doppelt verwende (um halt die Prozedur zu testen) , dann stoppt es immer an der Zeile nach Else. Die Fehlermeldung lautet: der Name kann nicht doppelt vergeben werden.
Ich hoffe ihr könnt mir helfen, ich hab schon unzählige Varianten versucht und bin langsam mit meinem Latein am Ende.
Liebe Grüße
Donna
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob der Blattname schon vorhanden ist
24.07.2019 15:53:00
Torsten
Hallo Donna,
versuch mal:

Function WorksheetExists(wsName As String) As Boolean
Dim ws As Worksheet
Dim ret As Boolean
ret = False
wsName = UCase(wsName)
For Each ws In ThisWorkbook.Sheets
If UCase(ws.Name) = wsName Then
ret = True
Exit For
End If
Next
WorksheetExists = ret
End Function
Sub test()
Dim a As String
For a = 1 To Sheets.Count
If WorksheetExists(a) Then
ActiveSheet.Name = InputBox("Der Tabellenname ist bereits vergeben. Bitte tragen Sie hier einen  _
neuen ein:")
Else
ActiveSheet.Name = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Variante1").Range("A" & LZa)
End If
Next
End Sub

Gruss Torsten
Anzeige
AW: Prüfen ob der Blattname schon vorhanden ist
25.07.2019 11:14:59
Donna
Ich hab deinen Vorschlag mal ausprobiert.
Kann es sein, dass eine For-Schleife nur mit Integer funktioniert?
Als ich es das erst Mal probiert habe, kam die Meldung "Fehler beim Kompilieren: Argumenttyp ByRef unverträglich" bei If WorksheetExists(a) Then.
Da ist mir aufgefallen, dass a noch als Integer dimensioniert war.
Dann habe ich es wie bei dir in String geändert und dann kam an dieser Stelle For a = 1 To Sheets.Count "Typen unverträglich"
Bei beiden Fehlertypen war immer nur das a markiert.
Anzeige
AW: Prüfen ob der Blattname schon vorhanden ist
24.07.2019 17:45:35
{Boris}
Hi,
quick and dirty:
Sub til()
Dim s As String
On Error Resume Next
s = Worksheets(Cells(1, 1)).Name
If Err Then
MsgBox “Gibt’s noch nicht“
Err.Clear
Else
MsgBox “Gibbet schon“
End If
On Error Goto 0
End Sub
VG Boris
AW: Prüfen ob der Blattname schon vorhanden ist
25.07.2019 11:31:57
Donna
Diese Variante habe ich gerade auch versucht und sie hat sofort funktioniert. Vielen Dank für deine Hilfe.
Anzeige
AW: Prüfen ob der Blattname schon vorhanden ist
25.07.2019 11:54:37
Donna
Kommando zurück. Ich habe jetzt ein weiteres Beispiel getestet um zu sehen, ob die Prozedur jetzt erkennt, dass es den Namen noch nicht gibt.
Leider hat sie wieder nach einem neuen Namen gefragt, obwohl der Name noch nicht vorhanden ist.
Die Prozedur scheint den ersten Teil komplett zu ignorieren.
Anzeige
Zeig mal den ganzen Code...
25.07.2019 11:57:42
{Boris}
Hi,
...am Besten mittels Beispielmappe.
VG Boris
AW: Prüfen ob der Blattname schon vorhanden ist
25.07.2019 12:01:09
Donna
So sieht meine Prozedur aus (Ausschnitt aus dem Teil, der Probleme macht):
'die Datei "Formulare" öffnen, das Tabellenblatt "Vorlage" kopieren und hinten anhängen
Set wbFormulare = Workbooks.Open("C:\Users\t0226770\Documents\Neuanlauf Einkaufsteil\Formulare.xlsx")
i = Sheets.Count
Sheets("Vorlage").Copy After:=Sheets(i)
'hier wird geprüft ob der Tabellenname bereits vergeben ist
'wenn ja, dann geht eine InputBox auf, in die man einen neuen Namen eingeben kann
On Error Resume Next
a = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Variante1").Range("A" & LZa)
If Err Then
ActiveSheet.Name = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Variante1").Range("A" & LZa)
Err.Clear
Else
ActiveSheet.Name = InputBox("Der Tabellenname ist bereits vergeben. Bitte tragen Sie hier einen neuen Namen ein:")
End If
On Error GoTo 0
'das kopierte auswählen und eine Variable für den Namen des Tabellenblattes definieren
Sheets(Sheets.Count).Select
Blattname = ActiveSheet.Name
Wenn ich in meine Liste mit Absicht den selben Namen eingebe und dann auf erstellen klicke, dann tut die Prozedur was sie soll und weist mich darauf hin, dass es den Namen schon gibt und soll doch bitte einen neuen eingeben.
Wenn ich dann aber in meiner Liste einen neuen Namen eingebe und auf erstellen klicke, dann sagt die Prozedur wieder "Bitte gib einen neuen Namen ein".
Kann es sein, dass ich die Reihenfolge der Befehle ändern muss?
Anzeige
Na ja...
25.07.2019 12:23:56
{Boris}
Hi,
Du musst den Code schon VOLLSTÄNDIG übernehmen. Dann funktioniert das auch.
Stichwort: .Name
VG Boris
AW: Na ja...
25.07.2019 15:17:45
Donna
Hab ich geändert und jetzt fragt die Prozedur nicht mehr, wenn der Name schon vorhanden ist nach einem neuen Namen.
Sie macht was sie soll, wenn der Name noch nicht vorhanden war. Aber sobald ich versuche zu testen was passiert, wenn ich einen Namen doppelt vergebe, dann trägt die Prozedur einfach den Namen "Vorlage" + Zahl ein.
Warum erscheint jetzt die InputBox nicht mehr?
PS: Ich kann keine Dateien hochladen. Aber ich kann hier gerne die komplette Prozedur reinstellen, wenn das helfen könnte mein Problem zu lösen.
Anzeige
Dann zeig mal den gesamten Code oT
25.07.2019 18:58:21
{Boris}
...
;
Anzeige
Anzeige

Infobox / Tutorial

Prüfen ob der Blattname schon vorhanden ist


Schritt-für-Schritt-Anleitung

Um zu überprüfen, ob ein Blattname bereits in einem Excel-Dokument vorhanden ist, kannst du die folgende VBA-Prozedur verwenden. Diese Prozedur fragt den Benutzer nach einem neuen Namen, wenn der eingegebene Blattname schon vorhanden ist.

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu.
  3. Kopiere den folgenden Code in das Modul:
Function WorksheetExists(wsName As String) As Boolean
    Dim ws As Worksheet
    Dim ret As Boolean
    ret = False
    wsName = UCase(wsName)
    For Each ws In ThisWorkbook.Sheets
        If UCase(ws.Name) = wsName Then
            ret = True
            Exit For
        End If
    Next
    WorksheetExists = ret
End Function

Sub TestBlattname()
    Dim a As String
    Dim LZa As Long ' Stelle sicher, dass LZa korrekt dimensioniert ist
    LZa = 1 ' Beispielwert, anpassen je nach Bedarf
    a = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Variante1").Range("A" & LZa)

    If WorksheetExists(a) Then
        ActiveSheet.Name = InputBox("Der Tabellenname ist bereits vergeben. Bitte tragen Sie hier einen neuen ein:")
    Else
        ActiveSheet.Name = a
    End If
End Sub
  1. Ersetze LZa mit der entsprechenden Zeile, in der dein gewünschter Blattname steht.
  2. Führe die Subroutine TestBlattname aus, um die Überprüfung zu starten.

Häufige Fehler und Lösungen

  1. Fehlermeldung: "Der Name kann nicht doppelt vergeben werden."

    • Stelle sicher, dass du die Funktion WorksheetExists korrekt integriert hast. Diese Funktion prüft, ob der Blattname bereits vorhanden ist.
  2. Fehlermeldung: "Argumenttyp ByRef unverträglich."

    • Achte darauf, dass die Variable a als String deklariert ist und die Werte korrekt zugewiesen werden.
  3. Prozedur fragt immer nach neuem Namen, obwohl Blattname nicht vorhanden ist.

    • Überprüfe die Logik in deiner If-Bedingung und stelle sicher, dass der Blattname tatsächlich korrekt ausgelesen wird, bevor die Prüfung erfolgt.

Alternative Methoden

Eine alternative Methode zur Prüfung, ob ein Blattname schon vorhanden ist, ist die Verwendung von Fehlerbehandlung:

Sub PrüfenUndBenennen()
    Dim s As String
    On Error Resume Next
    s = Worksheets(Cells(1, 1)).Name
    If Err Then
        MsgBox "Gibt's noch nicht"
        Err.Clear
    Else
        MsgBox "Gibbet schon"
    End If
    On Error GoTo 0
End Sub

Diese Methode verwendet eine einfache Fehlerbehandlung, um zu prüfen, ob ein Blattname bereits existiert. Es ist eine schnelle Lösung, die jedoch weniger kontrollierbar ist.


Praktische Beispiele

  1. Beispiel 1:
    Du möchtest sicherstellen, dass der Blattname "NeuesBlatt" nicht bereits existiert. Verwende dazu die oben beschriebene Subroutine TestBlattname.

  2. Beispiel 2:
    Wenn du einen Blattnamen aus einer bestimmten Zelle auslesen möchtest, passe den Code entsprechend an:

LZa = 2 ' Hier die Zeile anpassen, aus der der Blattname entnommen werden soll

Tipps für Profis

  • Nutze die UCase-Funktion, um die Eingaben zu normalisieren und die Groß-/Kleinschreibung zu ignorieren. Dies hilft, Fehler zu vermeiden, die durch unterschiedliche Schreibweisen entstehen können.
  • Überlege, die Eingabe des neuen Blattnamens auf Gültigkeit zu überprüfen (z.B. keine Sonderzeichen), um zukünftige Probleme beim Benennen zu vermeiden.
  • Dokumentiere deinen Code gut, um die Wartung und spätere Anpassungen zu erleichtern.

FAQ: Häufige Fragen

1. Kann ich die Subroutine auch für andere Excel-Versionen verwenden?
Ja, die gezeigten VBA-Methoden funktionieren in den meisten modernen Excel-Versionen.

2. Was tun, wenn ich weiterhin Fehlermeldungen erhalte?
Überprüfe die Dimensionierung deiner Variablen und stelle sicher, dass alle Referenzen korrekt gesetzt sind. Debugging-Tools im VBA-Editor können dabei hilfreich sein.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige