Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung

Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 08:27:15
Mathias
Hallo Forum,
ich möchte in einem Modul eine Fehlerbehandlung durchführen, wo die Namen der einzelnen Tabellenbätter geprüft werden. Wenn die Namen falsch sind soll eine Fehlermeldung ausgegeben werden, ansonsten soll eine andere Prozedur gestartet werden.
die Lage sieht eigentlich so aus ich habe vier Tabellenblätter, diese werden per Querry aus einen anderen Programm mit Daten gefüllt. Die T.Blätter heissen zum Beispiel Termine, Material, Obligo und Daten. Sie könnten aber auch Bw, Bestell, Bericht und Auswertung heissen oder eine Kombination aus den Namen aber meistens heissen Sie so Termine, Material, Obligo und Daten.
Ich hab mal probiert, die Namen direkt setzen, ungefähr so.

Sub test ()
Tabelle1.Name = "Termine"
Tabelle2.Name = "Material"
Tabelle3.Name = "Obligo"
Tabelle4.Name = "Daten"
End Sub

Ich möchte dem User aber nur einen Hinweis geben, dass die Tabellennamen falsch sind und er sein Querry anpassen muss.
vielen Dank
Mathias
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 09:42:21
u_
Hallo,

Sub NamenTesten()
Dim arrTab(4), i As Integer, strMldg As String
arrTab(1) = "Termine"
arrTab(2) = "Material"
arrTab(3) = "Obligo"
arrTab(4) = "Daten"
For i = 1 To 4
If Sheets(i).Name <> arrTab(i) Then
strMldg = MsgBox("Name der Tabelle " & i & " ist falsch", vbOKOnly + vbCritical, "Fehler")
End If
Next i
End Sub


Sub TabNameSetzen()
Dim arrTab(4), i As Integer
arrTab(1) = "Termine"
arrTab(2) = "Material"
arrTab(3) = "Obligo"
arrTab(4) = "Daten"
For i = 1 To 4
Sheets(i).Name arrTab(i)
Next i
End Sub

Gruß
Anzeige
AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 11:44:09
Mathias
Hallo U_ und Martin,
das Macro läuft, leider nicht ganz richtig, das liegt aber wohl an meiner Datei.
Durch das Query wurden ein Tabellenblatt1 und TB2 erzeugt mit folgenden Namen TB1 SAPBEXqueries und TB2 SAPBEXfilters, dies Tabellenbätter sind im Excel nicht zusehen, nur im VB Editor, wie bekomme ich das Problem denn gelöst.
Ansonsten ist das Macro Sub NamenTesten() und Sub TabNameSetzen() genau das welches ich gesucht habe.
vielen Dank schon mal im voraus
Anzeige
AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 11:58:11
Martin
Hallo Mathias,
ich halte das nach wie vor für einen Irrweg, da diese Lösung jeweils eine Ad-hoc-Anpassung der Namen verlangt, und das ist doch völlig unnötig. Hast Du meinen Vorschlag getestet? Warum kannst Du ihn nicht anwenden?
Wenn Du auf Deiner "Lösung" beharrst, kann ich Dir leider nicht mehr weiterhelfen.
Gruß
Martin Beck
P.S. Die beiden Blätter kannst Du über FORMAT-BLATT einblenden, es sei denn, sie wurden mit VBA ausgeblendet (xlVeryHidden). Dann brauchst Du für's einblenden ein Makro.
Anzeige
AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 09:59:09
Martin
Hallo Mathias,
die exakt gleiche Frage hast du 20 Minuten vorher in dem noch offenen Thread
https://www.herber.de/forum/archiv/580to584/t582653.htm
gestellt? Wieso eröffnest Du einen neuen Thread?
Zur Sache: M.E. ist Deines Herangehensweise ungeeignet. Sie setzt voraus, das dem Makro immer bekannt ist, was zulässige Tabellenblattnamen sind, und genau die Bedingung ist bei wechselnden Namen nicht erfüllt. Mach' doch eine richtige Fehlerbehandlung mit on error in Deinem eigentlichen Makro. Wenn in Deinem Makro ein Blatt angesprochen wird, das nicht existiert, gibt es den Laufzeitfehler 9. Das kann man abfangen, eine Meldung ausgeben und das Makro beenden.
Erstelle Dir mal eine Leere Datei, die nicht das Blatt "Tabelle2" enthält, und laß folgendes Makro laufen, dann siehst Du, was ich meine.

Sub Fehler_vermeiden()
On Error GoTo errorhandler
'hier käme jetzt Dein Code
Worksheets("Tabelle2").Range("A1").Copy Destination:=Worksheets("Tabelle1").Range("A1")
MsgBox Worksheets("Tabelle1").Range("A1")
errorhandler:
If Err.Number = 9 Then
MsgBox "Mindestens ein Tabellenblattname ist falsch, Query überprüfen"
Else
MsgBox "Es ist ein allgemeiner Fehler aufgetreten."
End If
End Sub

Gruß
Martin Beck
Anzeige
AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 10:28:34
Mathias
Hallo ihr beiden,
herzlichen Dank für eure Hilfe, ich werde den Code gleich mal ausprobieren.
viele Grüsse
Mathias
AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 12:45:26
Mathias
Hallo Martin,
deine Lösung ist ja wirklich besser :-). Ich den Code nicht verwendet, da ich das nicht verstanden hatte, kannst dus mirs bitte erklären? Wofür das steht
Worksheets("Tabelle2").Range("A1").Copy Destination:=Worksheets("Tabelle1").Range("A1")
MsgBox Worksheets("Tabelle1").Range("A1")
Anzeige
AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 13:06:55
Mathias
Hallo Martin,
dein Macro funktioniert fast perfekt, bis auf eine Sache.
Ich bekomme immer die Meldung.
MsgBox "Mindestens ein Tabellenblattname ist falsch!!" & vbLf & "Bitte Query überprüfen!!!
egal ob ein TB angesprochen werden kann oder nicht.
AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 14:54:42
Martin
Hallo Mathias,
aha. ;-)
Ich hatte folgenden Code vorgeschlagen:

Sub Fehler_vermeiden()
On Error GoTo errorhandler
'hier käme jetzt Dein Code
Worksheets("Tabelle2").Range("A1").Copy Destination:=Worksheets("Tabelle1").Range("A1")
MsgBox Worksheets("Tabelle1").Range("A1")
errorhandler:
If Err.Number = 9 Then
MsgBox "Mindestens ein Tabellenblattname ist falsch, Query überprüfen"
Else
MsgBox "Es ist ein allgemeiner Fehler aufgetreten."
End If
End Sub

Die beiden Zeilen
Worksheets("Tabelle2").Range("A1").Copy Destination:=Worksheets("Tabelle1").Range("A1")
MsgBox Worksheets("Tabelle1").Range("A1")
haben nur Beispielcharakter. Es soll halt irgendwas passieren mit Tabelle1 und Tabelle2 und Du solltest den Code in einer jungfräulichen Datei testen, die eben keine Tabelle2 enthält. Wenn du den Code anwenden willst, mußt Du die beiden Zeilen löschen und an deren Stelle Deinen Code hineinkopieren. Dann sieht das Ganze so aus:

Sub Fehler_vermeiden()
On Error GoTo errorhandler
'hier käme jetzt Dein Code
errorhandler:
If Err.Number = 9 Then
MsgBox "Mindestens ein Tabellenblattname ist falsch, Query überprüfen"
Else
MsgBox "Es ist ein allgemeiner Fehler aufgetreten."
End If
End Sub

Die Zeilen bedeuten folgendes:
On Error GoTo errorhandler
Wenn ein Laufzeitfehler auftritt, springe im Programm zur Stelle
errorhandler:
Dann läuft der Code ab da weiter. Zunächst wird geprüft, ob die Nummer des Laufzeitfehlers gleich 9 ist, da dies der Fehler ist der auftritt, wenn Du einen Tabellennamen "ansprichst" der nicht existiert. Wenn =9 dann erste Meldung, sonst 2. Meldung.
Zu Deiner Frage: Wenn ein Blattname nicht existiert, tritt der Laufzeitfehler auf, auch dann wenn die anderen Blattnamen korrekt sind. Soll das nicht so sein?
Es wäre vielleicht günstig, wenn Du mal den kompletten Code postest, den Du verwendest.
Gruß
Martin Beck
Anzeige
AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung
10.03.2005 15:17:28
Mathias
Super Martin,
lag einfach daran, das ich die Beispielzeilen nichz gelöscht hatte, vielen Dank
schönes WE
Mathias
;
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblattnamen prüfen und Fehlerbehandlung in VBA


Schritt-für-Schritt-Anleitung

Um die Namen der Tabellenblätter in Excel mit VBA zu prüfen und eine Fehlerbehandlung durchzuführen, kannst du den folgenden Code verwenden:

  1. Öffne den VBA-Editor (Alt + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" -> Einfügen -> Modul).
  3. Kopiere den folgenden Code in das Modul:
Sub NamenTesten()
    Dim arrTab(4) As String, i As Integer, strMldg As String
    arrTab(1) = "Termine"
    arrTab(2) = "Material"
    arrTab(3) = "Obligo"
    arrTab(4) = "Daten"

    For i = 1 To 4
        If Sheets(i).Name <> arrTab(i) Then
            strMldg = MsgBox("Name der Tabelle " & i & " ist falsch", vbOKOnly + vbCritical, "Fehler")
        End If
    Next i
End Sub
  1. Führe das Makro aus (F5), um die Tabellennamen zu prüfen.

Häufige Fehler und Lösungen

  • Fehler: „Nicht aufgelöster Tabellenblattname“

    • Lösung: Stelle sicher, dass die Tabellennamen in der arrTab-Liste korrekt sind. Wenn ein Tabellenblattname nicht existiert, wird eine Fehlermeldung angezeigt.
  • Fehler: Laufzeitfehler 9

    • Lösung: Verwende eine ordentliche VBA Fehlerbehandlung, um auf nicht existierende Blätter zu reagieren. Beispiel:
Sub Fehler_vermeiden()
    On Error GoTo errorhandler
    ' Hier kommt dein Code
    MsgBox Worksheets("Tabelle2").Range("A1") ' Beispiel
    Exit Sub
errorhandler:
    If Err.Number = 9 Then
        MsgBox "Mindestens ein Tabellenblattname ist falsch, Query überprüfen"
    Else
        MsgBox "Es ist ein allgemeiner Fehler aufgetreten."
    End If
End Sub

Alternative Methoden

Wenn du die Tabellennamen nicht direkt in den Code schreiben möchtest, kannst du die Namen dynamisch aus einer Liste in einem anderen Tabellenblatt beziehen. Dies ist hilfreich, wenn die geschäftsnamen häufig geändert werden.

Sub DynamischeNamenTesten()
    Dim i As Integer
    For i = 1 To 4
        If Sheets(i).Name <> Sheets("NamenListe").Cells(i, 1).Value Then
            MsgBox "Name der Tabelle " & i & " ist falsch"
        End If
    Next i
End Sub

Praktische Beispiele

Hier ist ein Beispiel für die Verwendung von VBA zur Überprüfung von Tabellennamen, das du anpassen kannst:

Sub BeispielNamenPruefen()
    Dim blattName As String
    blattName = "Termine"

    If Not WorksheetExists(blattName) Then
        MsgBox "Das Blatt " & blattName & " existiert nicht."
    End If
End Sub

Function WorksheetExists(sheetName As String) As Boolean
    On Error Resume Next
    WorksheetExists = Not Worksheets(sheetName) Is Nothing
    On Error GoTo 0
End Function

Tipps für Profis

  • VBA Fehlerbehandlung: Nutze On Error GoTo, um Laufzeitfehler zu erkennen und zu behandeln. Dies hilft, Probleme mit „nicht aufgelösten Tabellenblattnamen“ zu vermeiden.
  • Dynamische Namensüberprüfung: Halte die Tabellennamen in einer separaten Liste, um sie einfacher zu verwalten und zu prüfen.
  • Testumgebung: Erstelle eine Testdatei ohne die Tabellenblätter, um Fehler im Code zu identifizieren, ohne das Hauptprojekt zu beeinträchtigen.

FAQ: Häufige Fragen

1. Wie kann ich die Namen der Tabellenblätter in einer Liste überprüfen? Du kannst die Namen in ein Array speichern und sie dann mit den aktuellen Namen der Tabellenblätter vergleichen.

2. Was mache ich, wenn ich eine Fehlermeldung wegen eines nicht existierenden Blatts erhalte? Verwende eine VBA Fehlerbehandlung, um das Problem zu erkennen und eine benutzerfreundliche Fehlermeldung auszugeben.

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