[Excel] Worksheet vorhanden pruefen
#1
Es gibt bereits einen Thread zu diesem Thema, den ich mit meinem nur ergänzen möchte.

Ob ein Tabellenblatt vorhanden ist, kann man auch auf folgende Weise prüfen: man schreibt in eine Zelle die Formel (z.B.) =Tabelle2!A1. Gibt es diese Tabelle nicht, erhält man in der Zelle das Ergebnis #BEZUG!, also einen Fehler. Das kann man sich auch in VBA zunutze machen, indem man die Funktion Evaluate ("berechne") verwendet:

Code:
Sub TabVorhanden()
   If Not IsError(Application.Evaluate("Tabelle2!A1")) Then
      MsgBox "Tabelle2 vorhanden"
   Else
      MsgBox "Tabelle2 nicht vorhanden"
   End If
End Sub

Das funktioniert in gewisser Weise selbstverständlich auch, wenn man prüfen will, ob eine andere Arbeitsmappe geöffnet ist, oder ob ein Tabellenblatt in einer anderen Arbeitsmappe vorhanden ist:

Code:
Sub TabVorhandenAndereMappe()
   If Not IsError(Application.Evaluate("[AndereMappe.xlsx]Tabelle2!A1")) Then
      MsgBox "AndereMappe geöffnet"
      ' bzw. MsgBox "Tabelle2 in AndereMappe vorhanden"
   Else
      MsgBox "AndereMappe nicht geöffent"
      ' bzw. MsgBox "Tabelle2 in AndereMappe nicht vorhanden"
   End If
End Sub

Man muss also sehr genau differenzieren, wann und wie man diese Funktion für die Ermittlung des Vorhandenseins eines Tabellenblattes bzw. der Prüfung, ob eine Arbeitsmappe geöffnet ist, einsetzt.

Bis später,
Karin
Top
#2
Hallo Karin,

zu deinem ersten Code Beispiel:
Ich habe einst einmal ein verwandtes Thema verfolgt und hatte dazu auch einen kurzen Beitrag verfasst.

Was meint ihr ... kann man in Excel Tabellenblattnamen vor einer Änderung von Dritten schützen? Diese Frage wurde in einer Excel Community gestellt. Es kam die klare Antwort: Nein - das geht nicht.
Wenn uns "ein lieber Kollege" einen Streich spielen will, so kann er das auch. Ärgerlich wird die Sache vor allem, wenn wir Makros nutzen, welche sich auf diese Tabellenblattnamen beziehen. Passiert so etwas jeden Tag? Ich denke einmal nicht!

Trotzdem: Gehen wir einmal davon aus, dass uns jemand so sehr mag, so dass er uns ständig einen wichtigen Tabellenblattnamen ändert. Wie können wir dem entgegen wirken? Ich hatte da eine Idee ...
Wir wissen doch um welchen Tabellenblattnamen es sich handelt, oder? Warum lassen wir dann nicht vor dem Schließen der Excel Tabelle ein Makro durchlaufen, welches genau nach diesem Namen sucht. Ist er vorhanden ... OK. Wenn nicht, dann benennen wir dieses Tabellenblatt einfach wieder um! Aus diesem Grund legen wir uns einen VBA Code hinter diese Arbeitsmappe, der so aussehen könnte:

Code:
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim intBlzahl As Integer
    Dim gefunden As Boolean
    Dim ws As Worksheet
    gefunden = False
    For intBlzahl = 1 To Worksheets.Count
        If Sheets(intBlzahl).Name = "Muster" Then
            gefunden = True
        End If
    Next
    If gefunden = False Then
        For Each ws In Worksheets
            If ws.CodeName = "Tabelle3" Then
                ws.Name = "Muster"
                Exit For
            End If
        Next
        Me.Save
    End If
End Sub

Wissen ist Macht - es ist aber nicht schlimm nicht alles zu wissen.
Man muss nicht alles wissen - man muss nur wissen wo es steht, oder wo man Hilfe bekommt.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste