Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Prüfen, ob Tabellenblatt vorhanden

Prüfen, ob Tabellenblatt vorhanden
MB
Hallo zusammen,
ich möchte beim Öffnen einer Datei prüfen, ob es ein Tabellenblatt mit einem bestimmten Namen ("ad hoc") gibt. Gibt es das Tabellenblatt nicht, soll die Prozedur verlassen werden. Wenn es das Tabellenblatt gibt, soll die Prozedur durchlaufen werden.
Für Eure Hilfe besten Dank im Voraus
MfG
Mike
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
prüfen, ob recherche vorhanden
23.02.2011 09:37:58
selli
hallo mike,
in der recherche findest du dazu viele beispiele.
gruß selli
SheetExists()
23.02.2011 09:38:05
Erich
Hallo Mike,
das könntest du mit dieser Fkt. machen:

Public Function SheetExists(strName As String) As Boolean
On Error Resume Next
SheetExists = Not Sheets(strName) Is Nothing
End Function
Aufrufebn kannst du z. B. so:
If SheetExists("abc") then
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: SheetExists()
23.02.2011 10:09:43
MB
Hallo Erich,
recht herzlichen Dank - genau das was ich gebraucht habe!
Noch eine Frage dazu:
Ich habe praktisch mit
If SheetExists("ad hoc") then
eine große "Klammer" um die Prozedur gemacht.
Wenn das Tabellenblatt vorhanden ist, läuft excel durch die Prozedur, wenn nicht hatte ich
end sub
eingestellt.
Dann erhalte ich aber die Fehlermeldung "If Block ohne End if". Wenn ich das End Sub einfach rauslasse, funktionierts. Das lässt sich doch bestimmt besser lösen, oder?
Jetzt die Frage: Gibt es eine Möglichkeit, die If-Abfrage so zu gestalten, dass nicht der gesamte Code innerhalb stehen muss? --> Ist das Tabellenblatt nicht vorhanden, dann verlasse die Prozedur. Ich kriegs einfach nicht hin.
Nochmals recht herzlichen Dank für die tolle Hilfe!
LG
Mike
Private Sub Workbook_Open()
Dim wks As Worksheet
Dim g As Date
Dim h As Date
Dim a As Date
If SheetExists("ad hoc") Then
Set wks = Sheets("ad hoc")
wks.Select
g = wks.Cells(5, 4)
h = wks.Cells(5, 5)
a = wks.Cells(15, 4)
If Not a = Date Then
If Not g = h Then
a = Date
wks.Cells(15, 4) = a
wks.Cells(5, 4) = h
Range("E6:E11").Select
Selection.Copy
Range("D6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
End If
wks.Cells(1, 1).Select
Set wks = Sheets("Limitauslastungen")
wks.Select
wks.Cells(2, 4).Select
Else
End If
End Sub

Anzeige
AW: SheetExists()
23.02.2011 10:18:59
Martin
Hallo Mike,
suchst du vielleicht "Exit Sub"?
Viele Grüße
Martin
AW: SheetExists()
23.02.2011 10:48:55
MB
Danke Martin,
das wars!
Da habe ich ja mal wieder bewiesen, dass ich von VBA kaum ne Ahnung habe.
LG
Mike
Dafür ist das Forum da ;-) OW
23.02.2011 10:56:09
Martin
OW
Anzeige
Wo ist das Problem?
23.02.2011 10:49:58
Erich
Hi Mike,
so wie du den Code gepostet hast, läuft er locker durch.
Ich hab nur nioch ein wenig eingerückt, damit man besser sieht,
bis wo z. B. ein "If" geht:

Private Sub Workbook_Open()
Dim wks As Worksheet
Dim g As Date
Dim h As Date
Dim a As Date
If SheetExists("ad hoc") Then
Set wks = Sheets("ad hoc")
wks.Select
g = wks.Cells(5, 4)
h = wks.Cells(5, 5)
a = wks.Cells(15, 4)
If Not a = Date Then
If Not g = h Then
a = Date
wks.Cells(15, 4) = a
wks.Cells(5, 4) = h
Range("E6:E11").Select
Selection.Copy
Range("D6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
End If
wks.Cells(1, 1).Select
Set wks = Sheets("Limitauslastungen")
wks.Select
wks.Cells(2, 4).Select
Else
'  Else ist überflüssig, oder soll dann etwas getan werden?
End If
End Sub
Was meinst du mit "wenn nicht hatte ich end sub eingestellt." genau?
Gabs dann noch ein zweites "End Sub"?
@Martin: Exit Sub sollte man nicht ohne Not verwenden. If ... End If reicht hier völlig aus.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wo ist das Problem?
23.02.2011 11:10:53
MB
Hallo Erich,
ich bin der Meinung, dass es so etwas unübersichtlich ist. Jetzt steht ja noch nicht soviel da, aber vermutlich wird der code noch etwas anwachsen.
Und da hat mich gestört, das ich bei der If-Abfrage nicht die gewünschte Aktion auslösen kann. Wenn das Tabellenblatt nicht vorhanden ist, die Prozedur zu verlassen. Peinlich: Ich habe End Sub mit Exit Sub verwechselt.
Jetzt sieht´s so aus:
Private Sub Workbook_Open()
Dim wks As Worksheet
Dim g As Date
Dim h As Date
Dim a As Date
If Not SheetExists("ad hoc") Then
Exit Sub
End If
Set wks = Sheets("ad hoc")
wks.Select
g = wks.Cells(5, 4)
h = wks.Cells(5, 5)
a = wks.Cells(15, 4)
If Not a = Date Then
If Not g = h Then
a = Date
wks.Cells(15, 4) = a
wks.Cells(5, 4) = h
Range("E6:E11").Select
Selection.Copy
Range("D6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
End If
wks.Cells(1, 1).Select
Set wks = Sheets("Limitauslastungen")
wks.Select
wks.Cells(2, 4).Select
End Sub

Danke für die tolle Unterstützung!
Was würde ich nur ohne dieses Forum tun...
LG Mike
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Prüfmethoden für Tabellenblätter in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Funktion erstellen: Beginne mit der Erstellung einer Funktion, um zu prüfen, ob ein Tabellenblatt vorhanden ist. Du kannst die folgende VBA-Funktion verwenden:

    Public Function SheetExists(strName As String) As Boolean
       On Error Resume Next
       SheetExists = Not Sheets(strName) Is Nothing
    End Function
  2. Workbook_Open-Prozedur: Füge die Funktion in die Workbook_Open-Prozedur ein und überprüfe, ob das Tabellenblatt vorhanden ist. Wenn nicht, verlasse die Prozedur:

    Private Sub Workbook_Open()
       If Not SheetExists("ad hoc") Then Exit Sub
       ' Weitere Aktionen hier
    End Sub
  3. Aktionen bei vorhandenem Blatt: Wenn das Tabellenblatt vorhanden ist, kannst du deine gewünschten Aktionen im Code ausführen.


Häufige Fehler und Lösungen

  • Fehlermeldung "If Block ohne End If": Diese Fehlermeldung tritt auf, wenn die If-Bedingung nicht korrekt geschlossen wird. Stelle sicher, dass jede If-Bedingung ein passendes End If hat.

  • Verwechselung von End Sub und Exit Sub: End Sub beendet die gesamte Prozedur, während Exit Sub nur die aktuelle Prozedur verlässt. Verwende Exit Sub, um sicherzustellen, dass der Code korrekt funktioniert, wenn das Tabellenblatt nicht vorhanden ist.


Alternative Methoden

Eine alternative Methode, um zu prüfen, ob ein Tabellenblatt vorhanden ist, besteht darin, den folgenden Code zu verwenden:

Function CheckSheetExists(sheetName As String) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Worksheets(sheetName)
    CheckSheetExists = Not ws Is Nothing
    On Error GoTo 0
End Function

Diese Funktion funktioniert ähnlich wie die vorherige und kann in deinem Code verwendet werden.


Praktische Beispiele

Hier ist ein praktisches Beispiel, das zeigt, wie du prüfen kannst, ob ein Wert in einem anderen Tabellenblatt vorhanden ist:

Sub CheckValueInAnotherSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Datenblatt")

    If Application.WorksheetFunction.CountIf(ws.Range("A:A"), "Suchwert") > 0 Then
        MsgBox "Wert ist vorhanden."
    Else
        MsgBox "Wert ist nicht vorhanden."
    End If
End Sub

Dieses Beispiel zeigt, wie du mit CountIf überprüfen kannst, ob ein Wert in einer bestimmten Spalte eines anderen Tabellenblattes vorhanden ist.


Tipps für Profis

  • Verwende On Error Resume Next mit Bedacht: Diese Anweisung kann dazu führen, dass Fehler übersehen werden. Stelle sicher, dass du sie nur dort verwendest, wo es notwendig ist.

  • Klarheit im Code: Halte deinen Code übersichtlich und strukturiert. Verwende Einrückungen und Kommentare, um die Lesbarkeit zu verbessern.

  • Testen: Teste deinen Code immer in einer sicheren Umgebung, bevor du ihn in einer produktiven Datei einsetzt.


FAQ: Häufige Fragen

1. Wie kann ich prüfen, ob ein Tabellenblatt vorhanden ist?
Du kannst die Funktion SheetExists verwenden, um zu prüfen, ob ein Tabellenblatt mit einem bestimmten Namen existiert.

2. Was mache ich, wenn der Name des Tabellenblatts nicht eindeutig ist?
Stelle sicher, dass du den genauen Namen des Tabellenblatts verwendest. Du kannst auch eine Liste aller Tabellenblätter durchlaufen, um nach Ähnlichkeiten zu suchen.

3. Wie kann ich ein Tabellenblatt erstellen, wenn es nicht vorhanden ist?
Verwende die Funktion SheetExists zusammen mit einer If-Bedingung, um ein neues Tabellenblatt zu erstellen, wenn es nicht existiert:

If Not SheetExists("Neues Blatt") Then
    ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = "Neues Blatt"
End If

Mit diesen Anleitungen und Tipps solltest du in der Lage sein, effizient zu prüfen, ob Tabellenblätter in Excel VBA vorhanden sind und entsprechend zu handeln.

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