Start Hilfe und Support Microsoft Office EXCEL 2010 VBA: Prüfen, ob ein Tabellenblatt/Worksheet vorhanden ist

EXCEL 2010 VBA: Prüfen, ob ein Tabellenblatt/Worksheet vorhanden ist

E-Mail PDF

Ist das Tabellenblatt, das man ansprechen möchte, auch Bestandteil des Workbooks?

Kontext

Es gibt unterschiedliche Möglichkeiten, auf ein Tabellenblatt aus VBA heraus zuzugreifen. Eine sprechende Variante ist, das Tabellenblatt über seinen Namen, der auf dem Reiter steht, anzusprechen. Das funktioniert über das Objekt Worksheets("Name der Tabelle"). Wendet man einen falschen Namen an, dann kommt es zum Laufzeitfehler '9' ("Index außerhalb des gültigen Bereichs").

Aufgabenstellung

Im Folgenden wird eine kleine Funktion entwickelt, die erst einmal prüft, ob die Tabelle, die man im Workbook ansprechen möchte, überhaupt vorhanden ist. Ist man sich sicher (wenn also die noch zu entwickelnde Funktion True ist), dann kann man das Tabellenblatt auch verwenden.

Entwicklung der Funktion TabellenblattVorhanden

Zunächst wird die Funktion deklariert. Dabei wird definiert, das die Variable vName übergeben wird, die den Namen der zu suchenden Tabelle enthalten soll.

Function TabellenblattVorhanden(ByVal vName As String) As Boolean

...

End Function

Dann erfolgt die (notwendige) Variablendeklaration, ich habe generell Option Explicit eingeschaltet, um Schreibfehler oder Typenfehler zu vermeiden.

   Dim sheetSuche As Worksheet

Es handelt sich um die Objektvariable des Typs Worksheet namens sheetSuche, die gleich jeweils ein Tabellenblatt hält, die durchsucht werden.

  TabellenblattVorhanden = False

Die Rückgabewert der Funktion TabellenblattVorhanden wird auf False initialisiert. Nun beginnt die eigentliche Suche nach dem gewünschten Tabellenblatt. Dabei wird auf die Schleifenfunktion For each ... next zurückgegriffen.

   For Each sheetSuche In Worksheets
     If UCase(sheetSuche.Name) = UCase(vName) Then
       TabellenblattVorhanden = True
       Exit Function
     End If
   Next sheetSuche

Diese Schleife bewirkt, dass theoretisch alle Tabellenblätter nach dem Namen, den man an die Funktion TabellenblattVorhanden übergeben hat, durchsucht werden. Da sich die Tabellenblätter unabhängig von der Groß- und Kleinschreibung ansprechen lassen, wird durch die Verwendung von UCase() vermieden, dass Tabellen nicht gefunden werden, wenn man sich bei der diesbezüglichen Schreibweise geirrt hat. Wird eine Namensgleichheit (also das Vorhandensein der Tabelle) festgestellt, dann wird der Rückgabewert der Funktion auf True gesetzt. Nun braucht man nicht mehr weiter suchen, also wird die Funktion über Exit Function verlassen.

Hier der vollständige Programmcode

Function TabellenblattVorhanden(ByVal vName As String) As Boolean

  ' Worksheets lassen sich auch unabhängig von der Groß-/Kleinschreibung ansprechen, die Adressierung
  ' Worksheets("MeineTabelle").Activate
  '       bewirkt das gleiche wie
  ' Worksheets("meinetabelle").Activate
  ' Daher Abstrahiert der Namensvergleich UCase(sheetSuche.Name) = UCase(vName) von der
  ' Groß-/Kleinschreibung

  Dim sheetSuche As Worksheet

  TabellenblattVorhanden = False

  For Each sheetSuche In Worksheets
    If UCase(sheetSuche.Name) = UCase(vName) Then
      TabellenblattVorhanden = True
      Exit Function
    End If
  Next sheetSuche

End Function

Beispiel zum Herunterladen

Hier können Sie sich das Beispiel herunterladen.


Zuletzt aktualisiert am Montag, den 04. November 2013 um 18:40 Uhr  


Machen Sie mit

happerschoß dot net(t) wieder online

Nach einem wirklich kleinen Fehler, der nun endlich beseitigt ist, ist happerschoß dot net(t) wieder online und es wurde Platz geschaffen für neue Artikel und Ideen. Daher ist aktuell auf der Startseite nicht viel zu finden. Sollten Sie ältere Artikel suchen, dann schauen Sie im Archiv nach, da ist noch alles enthalten.

Für die Sicherheit wurde auch etwas getan. Die Internetseite ist nun nur noch ausschließlich verschlüsselt zu erreichen, also über https://www.happerschoss.net. Ein entsprechendes Sicherheitszertifikat wurde hinterlegt.

Die Kontaktseite wurde entfernt, da diese für Spams missbraucht worden ist. Aber Sie können dennoch eine Nachricht hinterlassen, schreiben Sie einfach an Info@happerschoss.net.

Ihr

www.happerschoss.net