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 Worksheet vorhanden

prüfen ob Worksheet vorhanden
24.10.2016 16:46:16
Gerhard
Hallo zusammen,
mit einem Makro erzeuge ich monatlich/oder an beliebigem Datum das Blatt "wksMonat" mit dem Blattname Januar 2016, Februar 2016 usw.
Dieses jeweils neu erzeugte Blatt wird in die gleichzeitig geöffnete Datei "Monate" kopiert.
Sub codeschnipsel()
Workbooks.Open Filename:=ThisWorkbook.Path & "\Monate.xlsx"
With wksMonat
.Copy After:=Workbooks("Monate.xlsx").Sheets(2)
End With
ActiveWorkbook.Save
ActiveWindow.Close
wksMonat.Delete
ActiveWindow.SelectedSheets.Delete
Application.ScreenUpdating = True
End Sub

Mit diesem .copy Befehl gelingt dies. ABER wenn das Monatsblatt bereits vorhanden ist wird als Januar 2016(2) oder Januar 2016(3) kopiert. Dies muss/möchte ich vermeiden. Deshalb sollte die Meldung kommen :"xxxx 2016" ist bereits vorhanden: Abbrechen? Überschreiben? oder Speichern mit Namenszusatz HEUTE?
Der erzeugte Blattname wäre dann z.B. Januar 2016_24.10 (weil heute am 24.10. erzeugt).
Diese Anpassung übersteigt meine Möglichkeiten weit!
Könnte mir jmd. diesen Code schreiben?
Sehr gerne erhalte ich dazu Nachrichten!
Gruß
Gerhard
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: prüfen ob Worksheet vorhanden
24.10.2016 17:17:49
Anton
Hi Gerhard,
mit dieser Funktion hier z.B:
Function TabDa(strBlatt As String) As Boolean
Dim wksBlatt As Worksheet
For Each wksBlatt In ThisWorkbook.Worksheets
If wksBlatt.Name = strBlatt Then
TabDa = True
Exit For
End If
Next wksBlatt
End Function
Dann Funktion in Sub aufrufen.
Sub TabellenBenennenMitPrüfung()
If TabDa("Tabelle10") = False Then
Worksheets.Add.Name = "Januar 2016"
Else
MsgBox "Die Januar 2016 ist bereits in der Mappe!"
End If
End Sub
VG Anton
Anzeige
AW: prüfen ob Worksheet vorhanden
24.10.2016 19:06:47
Gerhard
Hallo Anton,
Danke für deine Antwort.
Leider hatte ich in der Anfrage dies nicht deutlich genug beschrieben:
In der Ursprungsdatei "Anwesenheit.xlsm" werden Monatsblätter (= wksMonat) z. B. "Januar 2016" als Kopie eines Tabellenbereichs einmalig erzeugt. Das erzeugte Blatt ist vorher nicht vorhanden und wird nach dem Kopiervorgang wieder gelöscht. Deshalb kann/muss in der Ursprungsdatei auf Duplikat nicht geprüft werden.
Das aktuelle, neu erzeugte Monatsblatt z. B. Worksheet("Januar 2016") wird in die Ziel-Datei "Monate.xlsm" kopiert und anschließend in der Ursprungsdatei "Belegungsplanung" gelöscht. In der Zieldatei könnte das Monatsblatt Worksheet("Januar 2016") aber bereits vorhanden sein. Mit meinem bisherigen Code wird ungeprüft kopiert und evtl. das Blatt "Januar 2016(2) oder ...(3) zugefügt. Hier in der Ziel-Datei "Monate.xlsm" soll vor dem Einfügen des Blattes auf Überschreiben? oder Anderer Blattname? geprüft werden. Die Überprüfung muss im Makro in der Ursprungsdatei erfolgen.
Mit (..With wksMonat .Copy After:=Workbooks("Monate.xlsx").Sheets(2)...) geschieht KEINE Prüfung.
Ich hoffe, dass es dafür eine Lösung gibt.
Gruß
Gerhard
Anzeige
AW: prüfen ob Worksheet vorhanden
24.10.2016 19:32:07
Anton
Hallo Gerhard,
danke für die ausführliche Erklärung. Die Funktion sollte nur ein Denkanstoß sein, wie die Prüfung gelöst werden kann. Ich werde versuchen den von Dir gewünschten Code umzusetzen.
Vielleicht haben ja andere Mitglieder eine schnellere Lösung parat :)
VG Anton
AW: prüfen ob Worksheet vorhanden
24.10.2016 23:04:03
Anton
Hi Gerhard,
hab mich noch mal hingesetzt. Bin zwar kein VBA-Profi aber hier mein Vorschlag. Ich hoffe, dass es in die Richtung geht. Wahrscheinlich gibts auch eine elegantere Variante. Verbesserungsvorschläge sind herzlich willkommen!
Function TabDa2(strBlatt As String) As Boolean
Dim wksBlatt As Worksheet
Dim wkbziel As Workbook
Set wkbziel = Workbooks("Monate.xlsm")
For Each wksBlatt In wkbziel.Worksheets
If wksBlatt.Name = strBlatt Then
TabDa2 = True
Exit For
End If
Next wksBlatt
End Function
Sub codeschnipsel()
Dim wkbziel As Workbook
Dim wkbQuelle As Workbook
Dim wksMonat As Worksheet
Dim strPfad As String
Dim strPfadZiel As String
Dim tabName As String
Dim byWert As Byte
Application.DisplayAlerts = False
Application.ScreenUpdating = False
strPfad = "C:\" 'Pfad Quelldatei "Anwesenheit.xlsm" anpassen
strPfadZiel = "C:\" 'Pfad Zielmappe "Monate.xlsm" anpassen
Set wkbQuelle = Application.Workbooks.Open(strPfad)
Set wkbziel = Application.Workbooks.Open(strPfadZiel)
For Each wksMonat In wkbQuelle.Worksheets
If TabDa2(wksMonat.Name) = False Then
wksMonat.Copy After:=Workbooks("Monate.xlsm").Worksheets(Worksheets.Count)
wksMonat.Delete
Else
byWert = MsgBox(wksMonat.Name & " ist bereits vorhanden! Soll überschrieben werden?" _
, 4, "Abfrage bei vorhanden")
On Error GoTo fehler: 'Wenn wkbQuelle nach Schleife leer, Default Tabelle  _
hinzufügen
If byWert = 6 Then
Workbooks("Monate.xlsm").Worksheets(wksMonat.Name).Delete
wksMonat.Copy After:=Workbooks("Monate.xlsm").Worksheets(Worksheets.Count)
wksMonat.Delete
ElseIf byWert = 7 Then
byWert = MsgBox("Soll für das vorhandene Blatt " & wksMonat.Name & _
" ein neuer Tabellenname angelegt werden?", 4, "Vorhandener  _
Tabellenname")
If byWert = 6 Then
wiederholen:
tabName = InputBox(prompt:="Bitte Namen eingeben")
If Len(tabName) > 0 Then
wksMonat.Name = tabName
wksMonat.Copy After:=Workbooks("Monate.xlsm").Worksheets(Worksheets. _
Count)
wksMonat.Delete
GoTo next_i 'Nächste wksMappe, wenn Name eingegeben wurde
ElseIf byWert = 7 Then GoTo next_i
Else: GoTo wiederholen 'Wenn kein Name eingegeben wurde
End If
End If
End If
End If
next_i:
Next wksMonat
fehler:
While wkbQuelle.Worksheets.Count > 1 'Falls nicht alle Tabellen in wkbQuelle gelöscht  _
wurden
Worksheets(1).Delete
Wend
Workbooks("Anwesenheit.xlsm").Close savechanges:=True
Workbooks("Monate.xlsm").Close savechanges:=True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
VG Anton
Anzeige
AW: prüfen ob Worksheet vorhanden
25.10.2016 09:24:10
Gerhard
Hallo Anton,
erst heute Abend werde ich deine Makros übernehmen und testen können. Ich melde mich dann anschließend. Danke einstweilen für deine investierte Zeit!!
Gruß
Gerhard
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Prüfen, ob ein Worksheet vorhanden ist


Schritt-für-Schritt-Anleitung

Um in Excel VBA zu prüfen, ob ein Tabellenblatt vorhanden ist, kannst du die folgende Vorgehensweise nutzen:

  1. Funktion erstellen: Zuerst erstellst du eine Funktion, die überprüft, ob das Tabellenblatt existiert.

    Function TabDa(strBlatt As String) As Boolean
       Dim wksBlatt As Worksheet
       For Each wksBlatt In ThisWorkbook.Worksheets
           If wksBlatt.Name = strBlatt Then
               TabDa = True
               Exit Function
           End If
       Next wksBlatt
       TabDa = False
    End Function
  2. Sub-Prozedur aufrufen: In deiner Sub-Prozedur kannst du dann diese Funktion aufrufen, um zu prüfen, ob das Blatt vorhanden ist.

    Sub TabellenBenennenMitPrüfung()
       If TabDa("Januar 2016") = False Then
           Worksheets.Add.Name = "Januar 2016"
       Else
           MsgBox "Die Tabelle Januar 2016 ist bereits in der Mappe!"
       End If
    End Sub
  3. Adaptieren für das Kopieren: Wenn du das Blatt aus einer anderen Arbeitsmappe kopieren möchtest, kannst du den Code entsprechend anpassen, um die Zieldatei zu prüfen.


Häufige Fehler und Lösungen

  • Fehler: Tabelle existiert nicht, aber das Script läuft weiter

    • Lösung: Stelle sicher, dass du die Funktion TabDa in deiner Sub-Prozedur korrekt aufrufst, bevor du das Blatt kopierst.
  • Fehler: Ungültiger Blattname

    • Lösung: Überprüfe, ob du im Code die richtigen Namen verwendest. Variablen wie strBlatt müssen exakt mit den Blattnamen übereinstimmen.

Alternative Methoden

  1. Verwendung einer Error-Handling Methode: Du kannst auch versuchen, das Blatt direkt zu referenzieren und im Fehlerfall abzufangen.

    On Error Resume Next
    Set wksBlatt = ThisWorkbook.Worksheets("Januar 2016")
    If Not wksBlatt Is Nothing Then
       MsgBox "Das Blatt existiert bereits."
    Else
       MsgBox "Das Blatt ist nicht vorhanden."
    End If
    On Error GoTo 0
  2. Zählen der Worksheets: Du kannst auch durch alle Worksheets iterieren und die Namen in einer Liste speichern, um sie später zu überprüfen.


Praktische Beispiele

Hier ist ein vollständiges Beispiel, das die Überprüfung und das Kopieren eines Blattes in eine andere Arbeitsmappe zeigt:

Sub KopiereMonatlichesBlatt()
    Dim wkbZiel As Workbook
    Dim wksMonat As Worksheet
    Dim strBlattName As String
    strBlattName = "Januar 2016"

    Set wkbZiel = Workbooks.Open("C:\Monate.xlsx")

    If Not TabDa2(strBlattName) Then
        wksMonat.Copy After:=wkbZiel.Sheets(wkbZiel.Sheets.Count)
    Else
        MsgBox strBlattName & " ist bereits vorhanden!"
    End If

    wkbZiel.Close SaveChanges:=True
End Sub

Tipps für Profis

  • Verwende Dim as Worksheet um Variablen für Worksheets zu deklarieren, damit der Code übersichtlich bleibt.
  • Um die Performance zu verbessern, deaktiviere die Bildschirmaktualisierung während des Kopiervorgangs mit Application.ScreenUpdating = False.
  • Denke daran, Application.DisplayAlerts = False zu setzen, damit keine unerwünschten Dialoge während des Kopiervorgangs erscheinen.

FAQ: Häufige Fragen

1. Wie kann ich prüfen, ob ein Blatt in einer anderen Arbeitsmappe vorhanden ist? Um zu prüfen, ob ein Blatt in einer anderen Arbeitsmappe vorhanden ist, musst du zuerst die Arbeitsmappe öffnen und dann die gleiche Logik verwenden, um die Worksheets zu durchlaufen.

2. Was passiert, wenn ich den Namen eines Blattes im Code falsch schreibe? Wenn der Name nicht übereinstimmt, wird die Funktion TabDa False zurückgeben und das Blatt wird neu erstellt. Achte darauf, die Namen genau zu prüfen.

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