Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1200to1204
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Abfrage on error - nur 1 mal OK
chris
Hallo VBA Experten,
ich muss euch um Hilfe bitten.
Ich habe unten einen Code bei dem die Fehlerroutine nicht so klappt wie ich es mir vorstelle.
Es muss ein neuer Tabellenblattname eingegeben werden.
Dann wird die tabelle "Regal_leer" kopiert und entsprechend umbenannt.
Gebe ich einen Namen an der schon als Tabellenblatt besteht kommt eine Fehlermeldung und ich werde gefragt ob ich erneut einen Namen eingeben will.
Das klappt auch wunderbar bei der ersten "Falsch" Eingabe.
Gebe ich dann aber noch einmal einen Namen an der schon existiert dann kommt der VBA Fehler und es wird nicht mehr zu "fehler:" gesprungen.
Was mache ich Falsch ?
Vielen Dank an alle im voraus !
gruß Chris
Option Explicit
Sub Regal_anlegen()
Dim Antwort
Dim Neu_Sheet_Name As String
erneute_Eingabe:
Neu_Sheet_Name = InputBox("Bitte Namen für neues Regal eingeben !", "Eingabe")
Sheets("Regal_leer").Copy After:=Worksheets("Daten")
On Error GoTo fehler
ActiveSheet.Name = Neu_Sheet_Name
MsgBox ("Regal erfolgreich angelegt!"), vbInformation, "Info"
Exit Sub
fehler:
On Error GoTo 0
Antwort = MsgBox("Name-> " & Neu_Sheet_Name & " 

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Abfrage on error - nur 1 mal OK
28.02.2011 14:06:52
Rudi
Hallo,
Regal_leer solltest du erst kopieren, wenn der Name i.O. ist.
Sub Regal_anlegen()
Dim Antwort
Dim Neu_Sheet_Name As String, wks As Worksheet
Do
Set wks = Nothing
Neu_Sheet_Name = InputBox("Bitte Namen für neues Regal eingeben !", "Eingabe")
On Error Resume Next
Set wks = Worksheets(Neu_Sheet_Name)
On Error GoTo 0
If Not wks Is Nothing Then
Antwort = MsgBox("Name-> " & Neu_Sheet_Name & _
" 

Gruß
Rudi
AW: VBA Abfrage on error - nur 1 mal OK
28.02.2011 14:26:16
chris
Traumhaft.
Vielen dank Rudi !
Könntest DU mir trotzdem verraten ob das oder warum das mit dem on error nur 1 mal klappt ?
gruß Chris
Anzeige
AW: noch einmal offen
01.03.2011 07:31:13
chris
Hallo Rudi,
Danke noch einmal.
Aber warum ... oder ist es möglich mit der on error Anweißung 2 mal oder öfter den gleichen fehler abfzuangen ?
Ich bekomme es nur 1 mal hin.
Dankeschön
AW: noch einmal offen
02.03.2011 19:02:26
Nepumuk
Hallo,
weil die Behandlung des ersten Fehlers noch offen ist. Steht alles in der Hilfe zur "On Error-Anweisung".
Gruß
Nepumuk
AW: noch einmal offen
02.03.2011 19:26:43
chris
Hallo Nepumuk,
ich beende das doch mit on error goto 0
?
Hier mal ein Beispiel.
Option Explicit
Sub test()
Dim x
rauf:
On Error GoTo fehler
x = 100 / 0
Exit Sub
fehler:
On Error GoTo 0
GoTo rauf
End Sub

Danke
Anzeige
AW: noch einmal offen
02.03.2011 20:27:04
Nepumuk
Hallo chris,
ich versuch es mal mit einer Analogie:
Du hast in deinem Wohnzimmer einen Wasserhahn ohne ein Waschbecken darunter. Wenn du den Hahn kurz aufdrehst wird der Boden nass = Error. Jetzt hältst du ein Schnapsglas darunter und drehst wieder kurz auf. Das Glas ist voll aber der Boden bleibt trocken = On Error Goto Schnapsglas. Jetzt stellst du das Glas auf deinen Wohnzimmertisch = On Error Goto 0. Du nimmst das Glas wieder hältst es wieder unter den Wasserhahn und drehst ihn kurz auf. Du hast also die Fehlerbehandlung On Error Goto Schnapsglas eingeschaltet, da das Glas aber immer noch voll ist wird der Boden trotz Fehlerbehandlung nass.
Jetzt klarer warum beim 2. mal die Fehlerbehandlung versagt?
Abhilfe schafft nur das Glas auszuleeren. Das geschieht mit der Anweisung Resume (Next / Sprungmarke) oder End oder Exit / End (Sub / Function / Property).
Etwas komplizierter wird es wenn die Routine aus einer anderen Routine aufgerufen wird. Da wird bei einer fehlenden Fehlerbehandlung der Fehler in die aufrufende Prozedur durch geschleift. Und zwar so lange bis entweder eine nicht belegte Fehlerbehandlung gefunden wird, oder die letzte Routine mit End / End (Sub / Function / Property) abgeschlossen wird. Daraus eine Analogie zu basteln habe ich aber heute keine Lust mehr.
So funktioniert eine einfache Fehlerbehandlung mit Resume (Sprungmarke):
Sub test()
    
    Dim x
    
    On Error GoTo fehler
    
    rauf:
    
    x = 100 / 0
    
    Exit Sub
    
    fehler:
    
    Resume rauf
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Danke
04.03.2011 08:24:52
chris
Boa,
super erklärung.Das verstehe jetzt sogar ich.
Vielen Dank.
Ich hoffe ich kann es mir lange merken.!
Danke Nepumuk !

165 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige