Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1032to1036
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
Inhaltsverzeichnis

On Error GoTo ErrorHandler

On Error GoTo ErrorHandler
23.12.2008 18:27:00
Heinz
Hallo Leute
Habe unteres Makro von " Timo " erhalten...besten Dank
Nun habe ich "On Error GoTo ErrorHandler" selbst eingebaut,aber es funkt. nicht so richtig, läuft wenn kein Fehler nicht weiter.
Könntet ihr mir bitte nochmals helfen ?
Danke Heinz
Option Explicit
Dim Gelesen As Boolean

Private Sub CommandButton1_Click()
Dim myRow
Dim A As Long
On Error GoTo ErrorHandler
myRow = Application.Match(CSng(Me.TextBox27), Columns(1), 0)
ErrorHandler: MsgBox "Ohne Eingabe einer SAP-Nummer kann keine Eingabe eingetragen werden.", _
48, "   Hinweis für " & Application.UserName
If IsNumeric(myRow) Then
For A = 1 To 26
If IsNumeric(Me("TextBox" & A)) Then
Cells(myRow, A + 26) = CDbl(Me("TextBox" & A))
Else
Cells(myRow, A + 26) = Me("TextBox" & A)
End If
Next A
Else
MsgBox "SAP- Nr.: " & Me.TextBox27 & Chr(13) & "wurde nicht gefunden!", vbCritical
End If
End Sub


13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: On Error GoTo ErrorHandler
23.12.2008 18:37:00
hary
Hallo Heinz
versuch mal
On Error Resume Next
Gruss hary
AW: On Error GoTo ErrorHandler
23.12.2008 18:40:21
Tino
Hallo,
funktioniert nicht, weil es kein Error gibt. ;-)
mach es doch so

Dim Gelesen As Boolean
Private Sub CommandButton1_Click()
Dim myRow
Dim A As Long
myRow = Application.Match(CSng(Me.TextBox27), Columns(1), 0)
If IsNumeric(myRow) Then
For A = 1 To 26
If IsNumeric(Me("TextBox" & A)) Then
Cells(myRow, A + 26) = CDbl(Me("TextBox" & A))
Else
Cells(myRow, A + 26) = Me("TextBox" & A)
End If
Next A
Else
MsgBox "Ohne Eingabe einer SAP-Nummer kann keine Eingabe eingetragen werden.", _
48, "   Hinweis für " & Application.UserName
End If
End Sub


Gruß Tino

Anzeige
AW: On Error GoTo ErrorHandler
23.12.2008 18:50:16
Tino
Hallo,
wenn Du den kompletten Code der Userform so ersetzt, kannst Du nur Zahlen eingeben.
Wird diese nicht gefunden, kommt die Meldung.
Option Explicit
Dim Gelesen As Boolean

Private Sub CommandButton1_Click()
Dim myRow
Dim A As Long

myRow = Application.Match(CSng(Me.TextBox27), Columns(1), 0)

If IsNumeric(myRow) Then
 
 For A = 1 To 26
  If IsNumeric(Me("TextBox" & A)) Then
    Cells(myRow, A + 26) = CDbl(Me("TextBox" & A))
  Else
    Cells(myRow, A + 26) = Me("TextBox" & A)
  End If
 Next A

Else
  MsgBox "Ohne Eingabe einer SAP-Nummer kann keine Eingabe eingetragen werden.", _
         48, "   Hinweis für " & Application.UserName
End If

End Sub

Private Sub TextBox27_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 Dim myRow
 Dim A As Long
 If IsNumeric(Me.TextBox27) Then
        myRow = Application.Match(CSng(Me.TextBox27), Columns(1), 0)
        
        If Len(Me.TextBox27) = 5 And IsNumeric(myRow) Then
             For A = 1 To 26
                Me("TextBox" & A) = Cells(myRow, A + 26)
             Next A
             Gelesen = True
        ElseIf Gelesen Then
             For A = 1 To 26
                Me("TextBox" & A) = ""
             Next A
             Gelesen = False
        End If
  ElseIf Me.TextBox27 <> "" Then
        MsgBox "Text ist nicht zugelassen"
        Me.TextBox27 = ""
  End If
End Sub


Gruß Tino

Anzeige
AW: On Error GoTo ErrorHandler
23.12.2008 20:25:00
Tino
Hallo,
diese Option hatte ich nicht bedacht.
Option Explicit
Dim Gelesen As Boolean

Private Sub CommandButton1_Click()
Dim myRow
Dim A As Long

If Not IsNumeric(Me.TextBox27) Then GoTo Fehler:
myRow = Application.Match(CSng(Me.TextBox27), Columns(1), 0)

If IsNumeric(myRow) Then
 
 For A = 1 To 26
  If IsNumeric(Me("TextBox" & A)) Then
    Cells(myRow, A + 26) = CDbl(Me("TextBox" & A))
  Else
    Cells(myRow, A + 26) = Me("TextBox" & A)
  End If
 Next A

Else
Fehler:  MsgBox "Ohne Eingabe einer SAP-Nummer kann keine Eingabe eingetragen werden.", _
         48, "   Hinweis für " & Application.UserName
End If

End Sub

Private Sub TextBox27_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 Dim myRow
 Dim A As Long
 If IsNumeric(Me.TextBox27) Then
        myRow = Application.Match(CSng(Me.TextBox27), Columns(1), 0)
        
        If Len(Me.TextBox27) = 5 And IsNumeric(myRow) Then
             For A = 1 To 26
                Me("TextBox" & A) = Cells(myRow, A + 26)
             Next A
             Gelesen = True
        ElseIf Gelesen Then
             For A = 1 To 26
                Me("TextBox" & A) = ""
             Next A
             Gelesen = False
        End If
  ElseIf Me.TextBox27 <> "" Then
        MsgBox "Text ist nicht zugelassen"
        Me.TextBox27 = ""
  End If
End Sub


Gruß Tino

Anzeige
AW: On Error GoTo ErrorHandler
23.12.2008 20:29:00
Heinz
Hallo Tino
Ja jetzt ist es Optimal !!
Nochmals recht herzlichen Dank !!
Gruß
Heinz
AW: OHNE "On Error ..."
23.12.2008 20:53:08
Erich
Hallo Heinz,
da jetzt gerade meine Version fertig ist (oder zu sein scheint), schicke ich sie auch noch.
Das "Me." habe ich gelöscht - es findet ja alles in dieser UF statt.
Dafür habe ich ein "With Worksheets("Tabelle1")" eingefügt, damit klar ist,
zu welchem Tabellenblatt Columns(1) und Cells(...) gehören.
Hier mein Vorschlag:

Option Explicit
Dim Gelesen As Boolean
Private Sub CommandButton1_Click()
Dim A As Long, myRow
If TextBox27 = "" Then
MsgBox "In TextBox27 wurde nichts eingegeben.", vbCritical
TextBox27.SetFocus
Else
With Worksheets("Tabelle1")
myRow = Application.Match(CSng(TextBox27), .Columns(1), 0)
If IsNumeric(myRow) Then
For A = 1 To 26
If IsNumeric(Me("TextBox" & A)) Then
.Cells(myRow, A + 26) = CDbl(Me("TextBox" & A))
Else
.Cells(myRow, A + 26) = Me("TextBox" & A)
End If
Next A
Else
MsgBox "SAP-Nr. " & TextBox27 & vbLf & "wurde nicht gefunden!", vbCritical
TextBox27.SetFocus
End If
End With
End If
End Sub
Private Sub TextBox27_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim A As Long, myRow
For A = 1 To 26
Me("TextBox" & A) = ""
Next A
If TextBox27  "" Then
If IsNumeric(TextBox27) Then
With Worksheets("Tabelle1")
myRow = Application.Match(CSng(TextBox27), .Columns(1), 0)
If Len(TextBox27) = 5 And IsNumeric(myRow) Then
For A = 1 To 26
Me("TextBox" & A) = .Cells(myRow, A + 26)
Next A
Gelesen = True
ElseIf Gelesen Then
Gelesen = False
End If
End With
Else
MsgBox "Text ist nicht zugelassen"
TextBox27 = ""
End If
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: OHNE "On Error ..."
23.12.2008 21:00:55
Heinz
Hallo Erich
Das mit dem Tab.Blatt ist natürlich die DELUXE - Ausführung.
Recht herzlichen Dank
Gruß
Heinz
AW: OHNE "On Error ..."
23.12.2008 21:42:03
Tino
Hallo,
mach aus den Zeilen
Else
MsgBox "Text ist nicht zugelassen"
TextBox27 = ""
End If

beser diese
ElseIf Me.TextBox27 "" Then
MsgBox "Text ist nicht zugelassen"
TextBox27 = ""
End If

Bin jetzt an einem anderen Rechner wie vorhin, hier macht diese Zeile Probleme wen ich die MsgBox
mit der Entertaste bestädige, dass Event wird dadurch nochmal aufgerufen.
An dem anderen Rechner war dies nicht so.
Die Schleife
For A = 1 To 26
Me("TextBox" & A) = ""
Next A

hatte ich bei
ElseIf Gelesen Then
Damit wird nicht bei jedem Tastenanschlag diese Schleife ausgeführt,
sondern nur wenn zuvor die Textboxen gefüllt wurden.
Daher auch die Variable "Gelesen"
Gruß Tino
Anzeige
Korrektur !!!
23.12.2008 21:55:15
Tino
Hallo,
vergiss das mit der Else Zeile.
Erich hat auch den Code umgestellt, habe ich jetzt erst gesehen. sorry
Gruß Tino
AW: On Error GoTo ErrorHandler
23.12.2008 18:54:52
Daniel
Hi
wenn, dann baut man einen Error-Handler so auf:

Sub Test
... Code
On Error Goto FehlerHandler
... Hier der Code, wo der Fehler auftreten kann
On Error Goto 0
End '--- hier stoppt das Makro bei einem normalen lauf
FehlerHandler:
... hier der Code, der bei einem Fehler ablaufen soll
Resume ... es wird zur Zeile mit dem Fehler zurückgesprungen
Resume Next ... es wird zu Zeile nach dem Fehler gesprungen (beides ist optional
End Sub


ansonsten sollte man Fehler vermeiden, dh. wenn man Worksheetfuncition.MATCH verwendet, könnte man vorher mit Worksheetfunction.COUNTIF prüfen, ob der Wert überhaupt vorhanden ist, und dann im Code über normale IF-Abfragen entsprechnd reagieren.
Gruß, Daniel

Anzeige
AW: On Error GoTo ErrorHandler
23.12.2008 18:56:45
Reinhard
Hi Heinz,
schau dir mal deine Anfrage an, der Code ist quasi nicht am Stück. Klicke hier auf "Zitat" und füge den Code zwischen die pre-Tags ein, dann ist das weg.
On Error resume next ist gut aber auch schlecht.
Zumindest in der Testphase deines Codes laß das weg und versuche jeden auftretenden Fhler im Code abzufangen/zu verhindern.
Völlig ins Blaue hinein sage ich mal, ein Errorhandler muß nicht so heißen , kannst ihn auch xyz, abc nennen.
Mitten im Code macht er kaum Sinn, er gehört ans Ende des Codes.
Eine Variante:

Sub Test()
On Error goto Fehler
' dein Code
Exit sub
Fehler:
End Sub


Eine andere Variante:


Sub Test()
On Error goto Ende
' dein Code
Ende:
If err.number0 then ....
End Sub


Gruß
Reinhard

Anzeige
AW: On Error GoTo ErrorHandler
23.12.2008 20:15:43
Heinz
Hallo Leute
Erstmals Danke an alle für Eure Hilfe.
Ich meinte wenn ich auf CommandButton1 klicke und in der TextBox 27 ist kein Wert eingetragen bekomme ich immer einen Fehler.
Ich möchte diesen Fehler eben mit MsgBox abfangen.
Danke
Heinz
Nun der komplette Code
Option Explicit
Dim Gelesen As Boolean

Private Sub CommandButton1_Click()
Dim myRow
Dim A As Long
myRow = Application.Match(CSng(Me.TextBox27), Columns(1), 0)
If IsNumeric(myRow) Then
For A = 1 To 26
If IsNumeric(Me("TextBox" & A)) Then
Cells(myRow, A + 26) = CDbl(Me("TextBox" & A))
Else
Cells(myRow, A + 26) = Me("TextBox" & A)
End If
Next A
Else
MsgBox "SAP- Nr.: " & Me.TextBox27 & Chr(13) & "wurde nicht gefunden!", vbCritical
End If
End Sub



Private Sub TextBox27_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim myRow
Dim A As Long
If IsNumeric(Me.TextBox27) Then
myRow = Application.Match(CSng(Me.TextBox27), Columns(1), 0)
If Len(Me.TextBox27) = 5 And IsNumeric(myRow) Then
For A = 1 To 26
Me("TextBox" & A) = Cells(myRow, A + 26)
Next A
Gelesen = True
ElseIf Gelesen Then
For A = 1 To 26
Me("TextBox" & A) = ""
Next A
Gelesen = False
End If
Else
MsgBox "Text ist nicht zugelassen"
Me.TextBox27 = ""
End If
End Sub


Anzeige

174 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige