Anzeige
Archiv - Navigation
1940to1944
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Prüfung, ob Worksheet vorhanden
24.08.2023 14:34:36
David
Hallo zusammen,

für die Profis sicher kein Problem, aber mir fehlen da die Basics, über die Suche bin ich auch nicht weitergekommen, da mir keine geeigneten Suchbegriffe eingefallen sind.

Ich habe eine Datei, in der ich die einzelnen Blätter in der Liste der Excel-Objekte "sprechend" benannt habe, in diesem Fall heißt ein Worksheet im VBA "docs" und trägt den Namen "Dokumente". In einem Makro wird dieses Blatt gelöscht (docs.delete) und die Datei unter neuem Namen gespeichert. Wenn dieses Makro nun aber in der neu gespeicherten Datei erneut aufgerufen wird, ist das Worksheet nicht mehr vorhanden und es kommt eine Fehlermeldung wegen eines "nicht definierten Namens".
Aktuell umgehe ich das mit dem Konstrukt "For each wks ... Next" usw. und prüfe die Excel-Namen ("Dokumente") - was soweit erst mal funktioniert, aber die Gefahr birgt, dass nach einer Umbenennung andere Fehler entstehen bzw. die Löschung ins Leere geht.

Kann man das auch einfacher "einzeilig" abprüfen? Wie lautet die Syntax/der Befehl dazu?

Danke.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfung, ob Worksheet vorhanden
24.08.2023 15:04:37
daniel
Hi
du kannst auch in der Schleife den VBA-Namen ("docs") prüfen, falls dir der Registername ("Dokumente") zu unsicher ist.
diesen Namen kann man mit CodeName ermitteln.
Da du docs nicht als Objekt verwendest, läuft der Code in jedem Fall durch, egal ob das Blatt vorhanden ist oder nicht.
For each wks in thisworkbook.worksheets

if wks.CodeName = "docs" then wks.Delete
next

Gruß Daniel
AW: Prüfung, ob Worksheet vorhanden
24.08.2023 15:13:57
David
Ok, danke.

Ich hatte gehofft, es gibt da ein Konstrukt a la "if not exist.... then" oder ähnliches.

Schade.
AW: Prüfung, ob Worksheet vorhanden
24.08.2023 18:03:29
Yal
Hallo David,

Es ist tatsächlich so, dass die Collection "Worksheets" nur durch den lesbaren Name abfragbar ist, aber nicht über den CodeName (VBA-Name), sodass ein direkter Zugriff nicht möglich ist, d.h. nur über For Each.

Du kannst, und solltest, solche potentiell wiederkehrende Abfrage nach dem Worksheet in einem separaten Function ablegen:
Public Function WorksheetByCodename(CodeName As String, Optional WBName As String = "") As Worksheet

Dim W As Worksheet

If WBName = "" Then WBName = ThisWorkbook.Name
For Each W In Workbooks(WBName).Worksheets
If W.CodeName = CodeName Then
Set WorksheetByCodename = W
Exit Function 'Beschleuniger: wenn gefunden, dann raus
End If
Next
End Function

Dann ist der Verwendung in der Haupt-Prozedure schlanker:
Sub Test()

Dim W As Worksheet

Set W = WorksheetByCodename("Docs")
If Not W Is Nothing Then W.Delete
End Sub


VG
Yal
Anzeige
AW: Prüfung, ob Worksheet vorhanden
24.08.2023 18:04:03
Oberschlumpf
hi David

wo ist das Problem?

Daniels Code ist doch top!
Den CodeName = "docs" kannst du ganz genau nur 1x vergeben.
Und wenn Daniels Code eben ein Tabellenblatt mit CodeName = "docs" findet, wird genau nur dieses, kein anderes, gelöscht....ganz nach deinem Wunsch.
Und sollte es in der Blattsammlung kein CodeName = "docs" mehr geben, wird der Code auch nicht mit Fehler abgebrochen.

Ciao
Thorsten

Links zu Excel-Dialogen

Anzeige

Infobox zum Thema

EXCEL - VBA - Prüfung, ob Worksheet vorhanden


Inhaltsverzeichnis


Die Fragestellung


Du möchtest mit VBA überprüfen, ob ein bestimmtes Arbeitsblatt in einer Excel-Arbeitsmappe existiert.


Erläuterung des Problems {#erläuterung-des-problems}


Beim Automatisieren von Excel-Aufgaben kann es notwendig sein zu prüfen, ob ein Arbeitsblatt vorhanden ist, bevor Operationen wie das Lesen oder Schreiben von Daten durchgeführt werden.


Lösung des Problems {#lösung-des-problems}


Du kannst eine Funktion in VBA erstellen, die überprüft, ob ein Arbeitsblatt in der aktiven Arbeitsmappe vorhanden ist:

Function WorksheetExists(sheetName As String) As Boolean
    Dim sheet As Worksheet
    WorksheetExists = False
    For Each sheet In ThisWorkbook.Worksheets
        If sheet.Name = sheetName Then
            WorksheetExists = True
            Exit Function
        End If
    Next sheet
End Function

Um diese Funktion zu verwenden, kannst du sie in deinem VBA-Code wie folgt aufrufen:

Sub CheckWorksheet()
    Dim sheetNameToCheck As String
    sheetNameToCheck = "MeinBlatt" ' Den Namen des zu prüfenden Blattes anpassen

    If WorksheetExists(sheetNameToCheck) Then
        MsgBox "Das Arbeitsblatt '" & sheetNameToCheck & "' existiert."
    Else
        MsgBox "Das Arbeitsblatt '" & sheetNameToCheck & "' existiert nicht."
    End If
End Sub

Diese Funktion und der Sub geben eine Meldung aus, die bestätigt, ob das Arbeitsblatt existiert oder nicht.


Anwendungsbeispiele aus der Praxis


  • Datenimport: Vor dem Import von Daten in ein Arbeitsblatt sicherstellen, dass das Zielarbeitsblatt existiert.
  • Arbeitsblattverwaltung: Vermeidung von Fehlern beim Versuch, auf ein nicht existierendes Arbeitsblatt zuzugreifen.

Tipps


  • Verwende diese Funktion, bevor du versuchst, auf ein Arbeitsblatt zuzugreifen, um Laufzeitfehler zu vermeiden.
  • Du kannst die Funktion erweitern, um auch in anderen Arbeitsmappen als der aktiven zu suchen.

Verwandte Themenbereiche


  • Fehlerbehandlung in VBA
  • Automatisierung von Excel-Aufgaben
  • Verwaltung von Arbeitsblättern

Zusammenfassung


Die Funktion WorksheetExists bietet eine einfache Möglichkeit, die Existenz eines Arbeitsblattes in einer Arbeitsmappe zu überprüfen. Dies ist besonders nützlich, um Fehler zu vermeiden, die auftreten können, wenn du versuchst, auf ein Arbeitsblatt zuzugreifen, das nicht vorhanden ist. Durch die Verwendung dieser Funktion in deinem VBA-Code kannst du deine Makros robuster und zuverlässiger gestalten.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige