Tabellenblatt namen prüfen (VBA) Fehlerbehandlung

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

Betrifft: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: Mathias
Geschrieben am: 10.03.2005 08:27:15

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
Bild


Betrifft: AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: u_
Geschrieben am: 10.03.2005 09:42:21

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ß


Bild


Betrifft: AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: Mathias
Geschrieben am: 10.03.2005 11:44:09

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


Bild


Betrifft: AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: Martin Beck
Geschrieben am: 10.03.2005 11:58:11

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.


Bild


Betrifft: AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: Martin Beck
Geschrieben am: 10.03.2005 09:59:09

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


Bild


Betrifft: AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: Mathias
Geschrieben am: 10.03.2005 10:28:34

Hallo ihr beiden,

herzlichen Dank für eure Hilfe, ich werde den Code gleich mal ausprobieren.

viele Grüsse
Mathias


Bild


Betrifft: AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: Mathias
Geschrieben am: 10.03.2005 12:45:26

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")


Bild


Betrifft: AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: Mathias
Geschrieben am: 10.03.2005 13:06:55

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.


Bild


Betrifft: AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: Martin Beck
Geschrieben am: 10.03.2005 14:54:42

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


Bild


Betrifft: AW: Tabellenblatt namen prüfen (VBA) Fehlerbehandlung von: Mathias
Geschrieben am: 10.03.2005 15:17:28

Super Martin,

lag einfach daran, das ich die Beispielzeilen nichz gelöscht hatte, vielen Dank

schönes WE
Mathias


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Tabellenblatt namen prüfen (VBA) Fehlerbehandlung"