überprüfung der existenz eines tabellenblattes

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm InputBox MsgBox


Excel-Version: 9.0 (Office 2000)
nach unten

Betrifft: überprüfung der existenz eines tabellenblattes
von: rahel
Geschrieben am: 03.07.2002 - 10:35:30

hallo,
wie kann ich vor der ausführung eines makros überprüfen, ob das tabellenblatt, welches im makro entsteht, schon vorhanden ist (z.b. bei der zweiten ausführung des makros)?
gruss rahel

nach oben   nach unten

Re: überprüfung der existenz eines tabellenblattes
von: Hajo_Zi
Geschrieben am: 03.07.2002 - 10:38:13

Hallo rahel

149. feststellen, ob worksheet vorhanden ist
hier ein Beispiel, welches Du relativ einfach entsprechend abändern kannst:
Sub TabAuswahl()
Dim Sh As Worksheet
Dim sName$
sName = InputBox("Bitte Tabellenname auswählen!")
For Each Sh In Worksheets
If InStr(Sh.Name, sName) > 0 Then
Sh.Select
Exit Sub
End If
Next Sh
Beep
MsgBox "Kein Blatt gefunden!"
End Sub


Gruß Hajo

nach oben   nach unten

wie war das genau gemeint?
von: rahel
Geschrieben am: 03.07.2002 - 11:24:46

hi hajo
also ich muss mein anliegen vielleicht ein bisschen präzisieren. ich habe ein makro, welches ein neues tabellenblatt mit einer pivot-tabelle erstellt. das makro wird über ein userform ausgelöst.
wenn ich aber nun das gleiche makro zum zweiten mal ausführe, erhalte ich einen fehler, da ja das tabellenblatt, welches in dem makro erstellt werden soll, schon besteht.
ich möchte nun also bevor das makro ausgeführt wird überprüfen, ob bereits ein tabellenblatt mit dem namen pivot-tabelle existiert.
gruss rahel

nach oben   nach unten

Re: wie war das genau gemeint?
von: Timo
Geschrieben am: 03.07.2002 - 12:23:40

Hallo Rahel,

einfach so:


Sub Prüfen()

Dim i as Byte

For i = 1 to Worksheets.Count
    If Worksheets(i).Name = "Pivot-Tabelle" Then
        MsgBox("Blatt schon vorhanden")
    Else
        Dein_Makro
    End If
Next i

End Sub

Gruss
Timo

nach oben   nach unten

fehler ausgabe
von: rahel
Geschrieben am: 03.07.2002 - 13:15:50

hi nochmals,
diese variante gibt mir leider einen fehler aus. wieso das?

Dim i As Byte

For i = 1 To Worksheets.Count
If Worksheets(i).Name = "Pivot_Tabelle_Fragen" Then
MsgBox ("Diese Auswertung wurde bereits getätigt!")
Else
If ComboBox1.ListIndex = 0 Then
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Pivot_Tabelle_Fragen"
...
End If
End If
Next i

For i = 1 To Worksheets.Count
If Worksheets(i).Name = "Pivot_Tabelle_Themen" Then
MsgBox ("Diese Auswertung wurde bereits getätigt!")
Else
If ComboBox1.ListIndex = 0 Then
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Pivot_Tabelle_Themen"
...
End If
End If
Next i


nach oben   nach unten

Welchen Fehler denn?
von: Timo
Geschrieben am: 03.07.2002 - 13:20:16

Müsstest du schon mal schreiben, sonst wirds schwierig ;)

Gruss
Timo


nach oben   nach unten

Re: Welchen Fehler denn?
von: rahel
Geschrieben am: 03.07.2002 - 13:28:48

'laufzeitfehler 1004':
kann einem blatt nicht den gleichen namen geben wie einem anderen blatt, einer objektbibliothek oder einer arbeitsmappe, die auf visual basic bezug nimmt.

der fehler tritt an folgender stelle auf:

Dim i As Byte

For i = 1 To Worksheets.Count
If Worksheets(i).Name = "Pivot_Tabelle_Fragen" Then
MsgBox ("Diese Auswertung wurde bereits getätigt!")
Else
If ComboBox1.ListIndex = 0 Then
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Pivot_Tabelle_Fragen" <<<<<<<<<<<<<<<<<<<<
...
End If
End If
Next i

For i = 1 To Worksheets.Count
If Worksheets(i).Name = "Pivot_Tabelle_Themen" Then
MsgBox ("Diese Auswertung wurde bereits getätigt!")
Else
If ComboBox1.ListIndex = 0 Then
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Pivot_Tabelle_Themen"
...
End If
End If
Next i

wenn ich dann jedoch den vb-editor schliesse, ist das tabellenblatt mit der pivot-tabelle trotzdem erstellt worden. ausserdem ist noch ein leeres tabellenblatt vorhanden, welches aktiviert ist.



nach oben   nach unten

Re: Welchen Fehler denn?
von: Martin Beck
Geschrieben am: 03.07.2002 - 13:40:12

Hallo Rahel,

das Verhalten von Excel ist logisch, da Dein Code unlogisch ist. ;-)

Nehmen wir mal an, daß dritte Tabellenblatt wäre "Pivot_Tabelle_Fragen". Für i=1 trifft dann die Bedingung

If Worksheets(i).Name = "Pivot_Tabelle_Fragen" Then

nicht zu und der Else-Zweig wird abgearbeitet. Und dann knallt es eben bei dem Versuch, ein bereits existierendes Tabellenblatt einzufügen.

Konsequenz: Du mußt die For-Next-Schleife zuerst komplett durchlaufen, um festzustellen, daß kein Tabellenblatt "Pivot_Tabelle_Fragen" heißt. Wenn doch, kannst Du z.B. das Makro abbrechen. Ansonsten Makro mit Einfügen des Blattes fortsetzen. Das Ganze geht dann etwa so:


For i = 1 To Worksheets.Count
    If Worksheets(i).Name = "Pivot_Tabelle_Fragen" Then
        MsgBox ("Diese Auswertung wurde bereits getätigt!")
        Exit Sub 'Makro wird abgebrochen
    End If
Next i
                     
If ComboBox1.ListIndex = 0 Then
    ActiveWorkbook.Sheets.Add
    ActiveSheet.Name = "Pivot_Tabelle_Fragen"
End If

Außerdem solltest Du i nicht als Byte, sondern als Integer oder Long deklarieren.

Gruß
Martin Beck

nach oben   nach unten

Re: Welchen Fehler denn?
von: rahel
Geschrieben am: 03.07.2002 - 13:49:49

danke, das klappt ja sogar ;-)

liebe grüsse, rahel


nach oben   nach unten

Re: Welchen Fehler denn?
von: Martin Beck
Geschrieben am: 03.07.2002 - 13:51:58

Logisch! ;-)

Gruß
Martin Beck


nach oben   nach unten

noch eine frage ;-)
von: rahel
Geschrieben am: 03.07.2002 - 14:00:36

sorry, aber noch ne frage:

wie sieht das ganze aus, wenn es mehrere möglichkeiten gibt. ich meine damit, es gibt vier möglichkeiten für den namen des enstehenden tabellenblattes.

For i = 1 To Worksheets.Count
If Worksheets(i).Name = "Pivot_Tabelle_Fragen" Then
MsgBox ("Diese Auswertung wurde bereits getätigt!")
Exit Sub 'Makro wird abgebrochen
End If
Next i
If ComboBox1.ListIndex = 0 Then
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Pivot_Tabelle_Fragen"
...
If ComboBox1.ListIndex = 3 Then
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Pivot_Tabelle_Regionen"

nach oben   nach unten

Re: noch eine frage ;-)
von: Michael Scheffler
Geschrieben am: 03.07.2002 - 14:06:54

Hallo,

dann die Abfrage in:


If Worksheets(i).Name Like "Pivot_*" Then

ändern, "Like" bietet sich eh immer an, es ist schneller und variabler.

Gruß

Micha

nach oben   nach unten

Re: noch eine frage ;-)
von: rahel
Geschrieben am: 03.07.2002 - 14:14:18

daran hab ich auch schon gedacht. jedoch ist da ein kleiner überlegungsfehler drin:
wenn eine auswertung schon stattgefunden hat, z.b. die auswertung nach fragen, dann trifft die bedingung immer zu, da ja alle blätter mit Pivot_ beginnen.

gruss, rahel

nach oben   nach unten

Re: noch eine frage ;-)
von: Martin Beck
Geschrieben am: 03.07.2002 - 14:46:40

Hallo Rahel,

füge halt die Schleife 4x ein und prüfe jeweils auf eine der 4 Tabellen.

Gruß
Martin Beck


 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Userform aus anderem Workbook aufrufen"