Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Bei Fehlermeldung 13 Text anzeigen
#1
Hallo zusammen,

ich habe ein Makro "Main", welches nacheinander verschiedene Makros aufruft. Bei diesen "unter"-Makros kann (sollte der User ein Tabellenblatt oder eine bestimmte Zelle falsch titulieren) die Fehlermeldung 13 auftauchen. Ich würde dem User (der nicht Makro-afin ist) gerne eine Meldung ausgeben ("Bitte überprüfen Sie den Tabellenblattnamen oder die zugehörige Zelle").
Ich habe an einer andere Stelle gelesen, dass man dies mit folgendem Code erreichen kann:

If Err.Number = 13 Then

        MsgBox "Mein Text"

End If

Jetzt stellt sich mir die Frage, wie ich das in mein(e) Makro(s) einbaue. Benötige ich diese Fehlermeldung innerhalb jedes unter-Makros oder kann ich es im Makro "Main" irgendwo platzieren? Wenn ich es innerhalb des unter-markos einfüge, kommt (logischerweise) die Fehlermeldung leider schon bevor es zu meiner Fehlercodeausgabe kommt, da "Sub_Name des unter-Makros" natürlich ganz am Anfang steht und bei falschem Tabellenblattnamen/falscher Zellenbeschreibung schon der Fehler generiert wird.

Ich hoffe ich konnte mich verständlich ausdrücken.

Besten Dank im Voraus und viele Grüße,

Michael
Antworten Top
#2
Hallo Michael,

lies Dir dazu mal dieses Tutorial durch: Fehlerbehandlung (0) - Einführung

Gruß Uwe
Antworten Top
#3
Warum hat der User überhaupt die Möglichkeit eine ungültige Name zu wählen ?
Antworten Top
#4
Bin mal gespannt, snb, ob Dir eine alternative Füllung der ComboBox bekannt ist:
Code:
Sub FillDD()
For i = 1 To Worksheets.Count
  ComboBox1.AddItem Worksheets(i).Name
Next
End Sub

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
z.B


Code:
Sub M_snb()
   for each sh in sheets
     c00=c00 & "|" & sh.name
   next

   combobox1.list=split(mid(c00,2),"|")
End Sub
Antworten Top
#6
Hallo zusammen,

ich habe ein Makro "Main", welches nacheinander verschiedene "unter-"Makros ausführt. Bei diesen unter-Makros ist es wichtig, dass sowohl die Tabellenblätter als auch die Überschrift in einer Tabelle korrekt geschrieben sind. Bei fehlerhafter Bezeichnung des Tabellennames oder der Tabelleüberschrift kommt es zur Fehlermeldung 13 (da das Makro natürlich keinen Zugriff herstellen kann). Der user meiner Excel-Datei ist nicht Makro-affin. Ich würde ihm gerne über eine Ausgabe anzeigen, wenn es zur Fehlermeldung 13 kommt, allerdings in eigenen Worten. Es wäre schön, wenn bei Auftreten dieses Fehler ein Text "Bitte Tabellenblattnamen und Tabellenüberschriften überprüfen" angezeigt wird. Ich habe gesehen, dass dies durch folgenden (sinngemäß) Code erreicht werden kann:

If Err.Number = 13 Then

   MsgBox "Hier mein Text", vbInformation

Exit Sub

Wie baue ich dieses Teil alelrdings in mein Makro ein? Wenn ich erst im unter-Makro einfüge, kommt natürlich die Fehlermeldung davor, da ja "Sub Name_des_Moduls" dann schon falsch sein kann. Daher müsste diese Abfrage wohl schon im Main auftauchen.

Danke für eure Hilfe,

viele Grüße,

Michael
Antworten Top
#7
Danke für eure Hilfe!

@Uwe: Ich habe mir das angeschaut. Allerdings stellt sich mir die Frage, wie schon allein den Aufruf einer Sub (meine unter-Makros) auf einen Fehler überprüfen kann. Denn ist ein Tabellenblatt nicht richtig tituliert, kommt es schon direkt beim Aufruf zum Fehler. Die Bsps deines Links überprüfen ja immer direkt eine Division innerhalb einer Sub. Meine Fehler-Überprüfung müsste allerdings vorher ansetzen.

@snb und RPP63: Mit euren Beiträgen komme ich nicht wirklich weiter =/

Viele Grüße,

Michael
Antworten Top
#8
Hallo,

entweder hast Du den Text aus dem Link nicht richtig gelesen oder nicht verstanden:


Zitat:Fehlerbehandlung ist für Fehler, die während der Laufzeit auftreten, d.h. VBA kann etwas nicht verarbeiten.

Sei es so etwas Simples wie eine Division durch 0, ein Zugriff auf ein Tabellenblatt, welches nicht existiert oder scheinbar komplexere Dinge wie Zugriffe auf ein Objekt, welches nicht oder so nicht zur Verfügung steht.

Und dann folgen die weiteren Kapitel, ist genau auf Dein Problem zugeschnitten!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#9
Hallo Michael!
Zitat:@snb und RPP63: Mit euren Beiträgen komme ich nicht wirklich weiter =/
Eine Fehlerbehandlung sollte nur bei unerwarteten Fehlern greifen!
Die Falscheingabe eines Tabellennamens darf der geneigte Programmierer aber durchaus voraussetzen.
Entweder Du füllst eine ComboBox in einer UserForm mit den vorhandenen Tabellennamen (snb and me),
oder Du prüfst im Programmverlauf, ob das Sheet überhaupt vorhanden ist.
Die On Error - Methode sollte nur dafür eingesetzt werden, wenn Du nicht "klug" programmiert hast.

Zeig mal Deinen Code!

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#10
Hallöchen,

bei der Fehlerbehandlung sollte man auch den Aufwand berücksichtigen. Es macht schon einen Unterschied, ob man wegen 3 Zeilen code 30 Zeilen Fehlerbehandlung schreiben muss, um alle Eventualitäten mit qualifizierten Meldungen abzudecken, oder mit On Error Goto ErrorHandler eine Standardmeldung ausgibt und damit zumindest verhindert, dass der Nutzer die Debuggen-Meldung bekommt.
Ich denke, 27 Codezeilen einzusparen ist auch nicht unklug. Und es könnten durchaus deutlich mehr sein, je nach Problemstellung.

Michael, prüfe vor Aufruf des Sub, ob das betreffende Blatt vorhanden ist.

Das geht relativ einfach mit diesem Prinzip:
Code:
Sub Test
If IsError(Application.Evaluate("=Liste!A1")) Then MsgBox "Nix Blattda" Else MsgBox "Blattda"
End Sub

Das Ding hat nur den Haken, dass bei vorhandenem Fehlerwert in der angesprochenen Zelle auch Nix Blattda kommt Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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