HERBERS Excel-Forum - das Archiv

Thema: VBA - Prüfen ob Blatt existiert

VBA - Prüfen ob Blatt existiert
Christian
Hallo,

ist jemand bitte so nett und schaut sich das hier mal an:

Dim blattVorhanden As Boolean

Dim sh As Worksheet

blattVorhanden = False
For Each sh In ThisWorkbook.Sheets
If sh.Name = "Kopie" Then
blattVorhanden = True
Exit For
End If
Next sh


gibt es auch einfachere Wege, die Existenz des Blattes Kopie zu prüfen?

Danke
Christian

Danke
Chrístian
AW: VBA - Prüfen ob Blatt existiert
Kuwer
Hallo Christian,

z.B. so:
Sub aaa()

Dim blattVorhanden As Boolean
On Error Resume Next
blattVorhanden = Not Worksheets("Kopie") Is Nothing
On Error GoTo 0
MsgBox blattVorhanden
End Sub

Gruß, Uwe
AW: VBA - Prüfen ob Blatt existiert
daniel
Hi
wenn eine Objektschleife vollständig durchläuft, dann wird am Schluss die Schleifenvariable (dein sh) auf Nothing gesetzt.
bei einem vorzeitigem Schleifenabbruch behält die Variable das Objekt, bei dem Abgebrochen wurde.
Das kann man abfragen und sich somit die die Prüfvariable (blattVorhanden) auch sparen.
Dim blattVorhanden As Boolean

Dim sh As Worksheet

For Each sh In ThisWorkbook.Sheets
If sh.Name = "Kopie" Then Exit For
Next sh
blattVorhanden = not sh is Nothing



Alternativ kann man auch einfach das gesuchte Blatt einer Variablen zuweisen, nach dem man VBA angewiesen hat, Fehler einfach zu ignorieren.
ob ein Fehler aufgetreten ist, kann man anhand der Systemvariable ERR überprüfen (kein Fehler: Err = 0), oder man prüft ob sh sein Objekt erhalten hat (wobei man hier aufpassen muss, ob man die Variable nicht schon vorher mal verwendet hat und daher einen Wert haben könnte)
On Error Resume Next

Set sh = Thisworkbook.Sheets
blattVorhanden = (Err = 0)
On Error Goto 0


Gruß Daniel
AW: VBA - Prüfen ob Blatt existiert
Christian
Hallo Daniel,

danke dass du nochmal geschaut hast.
da bekomme ich bei copy die Meldung Function oder Variable erwartet.

Gruß
Christian
AW: VBA - Prüfen ob Blatt existiert
daniel
keine Ahnung warum. Nach meinem Wissen sollte das so funktionieren.
Wenn nicht, dann machs so wie du es zuerst gemacht hast:

Dim wsPunkte As Worksheet

Dim wsKopie As Worksheet
Dim letzteZeile As Long

Set wsPunkte = ThisWorkbook.Sheets("Punkte")

For Each wsKopie In ThisWorkbook.Worksheets
If wsKopie.Name = "Kopie" Then Exit For
Next

If wsKopie Is Nothing Then
wsPunkte.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Set wsKopie = ActiveSheet
wsKopie.Name = "Kopie"
End If

letzteZeile = wsKopie.Cells(wsKopie.Rows.Count, "A").End(xlUp).Row
Probiere es mal...
Case
Moin Christian, :-)

... so: ;-)

If Evaluate("ISREF(Kopie!A1)") Then MsgBox "Vorhanden!"

Servus
Case
hmmmm
Christian
Hallo ihr 3,

erstmal danke für eure schnellen, alle funktionierenden Antworten.

Was ich leider immer noch nicht verstehe ist, wie ich dann das Ausführen des nächsten Codeabschnitts von der Existenz des Blatts abhängig machen kann...

im Sinn von wenn nicht existent, dann fahre mit dem nächsten Codeabschnitt fort, wenn existent, dann überspringe den nächsten Abschnitt und mach erst mit dem übernächsten weiter...

so war meine Anfrage eigentlich gedacht...

der nächste Abschnitt wäre Erstellen einer Kopie des Blatts Punkte

    Set wsPunkte = ThisWorkbook.Sheets("Punkte")


wsPunkte.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Set wsKopie = ActiveSheet
wsKopie.Name = "Kopie"


der übernächste dann

    letzteZeile = wsKopie.Cells(wsKopie.Rows.Count, "A").End(xlUp).Row


Wie ihr seht, ich brauch das Blatt Kopie nicht erstellen, wenn es bereits existiert.
AW: hmmmm
xlKing
Nochmal Hi

meine Antwort hat sich mit deiner überschnitten. Daher noch zur Ergänzung.

Du kannst die Funktion auch aufrufen mit
If Not BlattVorhanden("Kopie") Then
und dann deinen Block zum erstellen angeben.

Gruß Mr. K.

AW: hmmmm
Christian
und ich habe auf deine erste Antwort geantwortet bevor ich die zweite gelesen habe, sorry
AW: hmmmm
daniel
hi

im Prinzip so:

dim wsPunkte as worksheet

dim wsKopie as worksheet
dim letzeZeile as long

set wsPunkte = ThisWorkbook.Sheets("Punkte")

for each wsKopie in ThisWorkbook.Worksheets
if wsKopie.Name = "Kopie" then exit for
next

if wsKopie is Nothing then
set wsKopie = wsPunkte.Copy(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsKopie.Name = "Kopie"
end if

letzteZeile = wsKopie.Cells(wsKopie.Rows.Count, "A").End(xlUp).Row
AW: VBA - Prüfen ob Blatt existiert
xlKing
Hi,
ich mache das am liebsten über eine eigene Funktion in einem beliebigen Standardmodul.

Function BlattVorhanden(Name As String) As Boolean

On Error Resume Next
BlattVorhanden = IsObject(Sheets(Name))
End Function


Diese kannst du dann aufrufen mit

If BlattVorhanden("Kopie") Then


Gruß Mr. K.


AW: VBA - Prüfen ob Blatt existiert
Christian
Hallo Herr K,
ich hab if not.. daraus gemacht, da ich den Code ausführen wollte, wenn nicht vorhanden.

Aber so funktioniert es, vielen Dank
Christian