Probleme mit ErrorHandler



Excel-Version: 8.0 (Office 97)
nach unten

Betrifft: Probleme mit ErrorHandler
von: Steph@n
Geschrieben am: 13.05.2002 - 16:03:15

Hallöle,

habe in etwa folgendes Coding:

Sub Test()

For Each rngZelle in [rngBereich]

on Error GoTo Errorhandler
...Coding...

NächsteZelle:
Next rngZelle

Errorhandler:
If Err.Number = 91 then
GoTo NächsteZelle
End If

Jetzt habe ich damit folgendes Problem:
Tritt der Fehler das erste Mal auf, zieht die Fehlerbehandlung. Läuft das Programm dann beim nächsten Schleifendurchlauf wieder auf den Fehler, zieht die Fehlerbehandlung nicht mehr! Es erscheint das Fehlerfenster!

Was muss ich Coding verändern bzw. beachten, damit die Fehlerbehandlung immer zieht, egal wie oft er auf den Fehler trifft?

Vielen Dank für Eure Hilfe!

Gruss Stephan

nach oben   nach unten

Re: Probleme mit ErrorHandler
von: Volker Croll
Geschrieben am: 13.05.2002 - 16:29:14

Hallo Stephan,

stetze mal, nach "NächsteZelle" ein "on Error GoTo Errorhandler".

Denke mal diese Fehlerbehandlung ist insgesamt etwas ungluecklich, ist aber mit Codeschnippseln schwer zu beurteilen.

Gruss Volker


nach oben   nach unten

Re: Probleme mit ErrorHandler
von: mathias r.
Geschrieben am: 13.05.2002 - 17:18:30

Besser ist es auch vor der Stelle an der der Fehler auftreten kann die Fehlerursache abzufragen bzw. abzufangen. Der Fehler 91 ist "Objektvariable oder With-Blockvariable nicht festgelegt". Dies läßt sich testen mit z.B.


For Each rngZelle in [rngBereich]
If Not rngZelle Is Nothing Then
...Coding...
End If
Next

nach oben   nach unten

Re: Probleme mit ErrorHandler
von: Steph@n
Geschrieben am: 14.05.2002 - 08:34:56

Hallo Volker,


Dein Tipp hat leider nicht funktioniert!
Du Hast gesagt, meine Fehlerbehandlung ist nicht sehr glücklich gewählt! Anbei mal das komplette Coding. Vielleicht kannst Du mir ja einen Tipp geben, wie ich es abändern muss, um den gewünschten erfolg zu erzielen!
Mit dem Makro soll folgendes erreicht werden:
Habe auf dem Sheet "Zuordnung SKTO_BuKr" alle Sachkonten und ihre Zuordnung zu Buchungskreisen. (Je BuKr eine Spalte und in den Zeile die Konten). Auf dem Scheet "Zu löschende Konten" habe ich eine Spalte, die eine Auflistung von Sachkonten enthält.
Das Makro soll mir jetzt auf diesem Sheet hinter das jeweilige Konto schreiben, welchen Buchungskreisen es zugeordnet ist. Dies habe ich hier mit Hilfe der Suchfunktion versucht zu realisieren.
Aber sobald ein Konto garnicht auf dem Blatt enthalten ist, kommt der Fehler 91, den ich über die Fehlerroutine abfangen will, was ja leider nicht klappt!

Sub BuKrAbgleichenNEU()

Dim rngZelle1 As Range  
Dim rngZelle2 As Range  
Dim strBuKr As String  
Dim strSuchbegriff As String  
'---------------------

For Each rngZelle1 In Range("SKTO")    
    Sheets("Zu löschende Konten").Select
    rngZelle1.Select
    strSuchbegriff = rngZelle1.Value
   
    Sheets("Zuordnung SKTO_BuKr").Select
    On Error GoTo Errorhandler    
    Cells.Find(What:=strSuchbegriff, After:=ActiveCell, LookIn:=xlValues, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
       MatchCase:=False).Activate    
    ActiveCell.Interior.ColorIndex = 3
       
    strBuKr = Cells(1, ActiveCell.Column).Value
   
    Sheets("Zu löschende Konten").Select
    If IsEmpty(rngZelle1.Offset(0, 1)) = True Then    
        rngZelle1.Offset(0, 1) = strBuKr
        rngZelle1.Select
    Else
        Selection.End(xlToRight).Select  
        Selection.Offset(0, 1) = strBuKr
        rngZelle1.Select
    End If  
   
Weitersuchen:
    Sheets("Zuordnung SKTO_BuKr").Select
    On Error GoTo Errorhandler    
    Cells.FindNext(After:=ActiveCell).Activate
    If ActiveCell.Interior.ColorIndex = 3 Then GoTo NächsteZelle    
    GoTo Weitersuchen  
   
NächsteZelle:
Next rngZelle1
   
Errorhandler:
If Err.Number = 91 Then  
    GoTo NächsteZelle  
End If  

End Sub  

https://www.herber.de/mailing/ENDCODE#h.htm


Vielen Dank für Deine Hilfe!

Gruss Steph@n

nach oben   nach unten

Re: Probleme mit ErrorHandler
von: Steph@n
Geschrieben am: 14.05.2002 - 08:37:58

Hallo Matthias,

Habe unter Volkers Antwort mal mein Coding eingestellt. Bin mir nicht ganz sicher, wie ich Deinen Tipp dort einbauen könnte!

Gruss Stephan


nach oben   nach unten

neuer Code
von: mathias r.
Geschrieben am: 14.05.2002 - 09:22:38

Hallonochmal,

ich habe deinen Code etwas überarbeitet. Das Grundprinzip ist, daß die Find Methode einen Wert zurückgibt. Und zwar den Range der gefundenen Zelle bzw. Nothing wenn nichts gefunden wurde.
Deinen Abschnitt "weitersuchen" habe ich nicht verstanden weil er nichts macht wenn die zelle nicht gefärbt ist.
Außerdem habe ich die Select-Befehle rausgeschmissen. Die sollte man vermeiden, da sie Zeit kosten und ein Flimmern verursachen(was man allerdings durch den Befehl Application.Screenupdating=false abschalten könnte)
Hier erstmal mein Code:


Sub BuKrAbgleichenNEU()
Dim rngFound  As Range
Dim rngZelle1 As Range
Dim strBuKr As String
Dim strSuchbegriff As String
'---------------------

  For Each rngZelle1 In Range("SKTO")

    strSuchbegriff = rngZelle1.Value
    
    Set rngFound = Sheets("Zuordnung SKTO_BuKr").Cells.Find(What:=strSuchbegriff, LookIn:=xlValues, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
       MatchCase:=False)
    
    If Not rngFound Is Nothing Then
      rngFound.Interior.ColorIndex = 3
      strBuKr = Cells(1, rngFound.Column).Value
          
      If IsEmpty(rngZelle1.Offset(0, 1)) = True Then
          rngZelle1.Offset(0, 1) = strBuKr
      Else
          rngZelle1.End(xlToRight).Offset(0, 1) = strBuKr
      End If
    End If
  Next
End Sub



nach oben   nach unten

neuer Code
von: mathias r.
Geschrieben am: 14.05.2002 - 09:31:03

Hallonochmal,

ich habe deinen Code etwas überarbeitet. Das Grundprinzip ist, daß die Find Methode einen Wert zurückgibt. Und zwar den Range der gefundenen Zelle bzw. Nothing wenn nichts gefunden wurde.
Deinen Abschnitt "weitersuchen" habe ich nicht verstanden weil er nichts macht wenn die zelle nicht gefärbt ist.
Außerdem habe ich die Select-Befehle rausgeschmissen. Die sollte man vermeiden, da sie Zeit kosten und ein Flimmern verursachen(was man allerdings durch den Befehl Application.Screenupdating=false abschalten könnte)
Hier erstmal mein Code:


Sub BuKrAbgleichenNEU()
Dim rngFound  As Range
Dim rngZelle1 As Range
Dim strBuKr As String
Dim strSuchbegriff As String
'---------------------

  For Each rngZelle1 In Range("SKTO")

    strSuchbegriff = rngZelle1.Value
    
    Set rngFound = Sheets("Zuordnung SKTO_BuKr").Cells.Find(What:=strSuchbegriff, LookIn:=xlValues, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
       MatchCase:=False)
    
    If Not rngFound Is Nothing Then
      rngFound.Interior.ColorIndex = 3
      strBuKr = Cells(1, rngFound.Column).Value
          
      If IsEmpty(rngZelle1.Offset(0, 1)) = True Then
          rngZelle1.Offset(0, 1) = strBuKr
      Else
          rngZelle1.End(xlToRight).Offset(0, 1) = strBuKr
      End If
    End If
  Next
End Sub



nach oben   nach unten

Re: neuer Code
von: Steph@n
Geschrieben am: 14.05.2002 - 10:03:40

Hallo Matthias,,


Dein Ansatz funktioniert, aber ich brauche unbedingt auch die "Weitersuchen-Funktionalität", da das Konto ja in verschiedenen Buchungskreisen vorkommen kann, und ich alle BuKr aufgelistet bekommen möchte!
Mit Deinem Coding suchr er das Konto genau einmal und sobald er es gefunden hat, sucht er nach dem nächsten Konto. Er müste aber weitersuchen, ob das Konto vielleicht nochmal in einem anderen BuKr vorkommt.
Das wollte ich mit der Weitersuchen-Funktionalität realisieren und um sicherzustellen, dass er nicht unendlich lange immer wieder die selben Konton findet, habe ich die gefundenen "rot" dargestellt.
Sobald er auf ein rotes trifft, geht er zum nächsten Konto über!
Habe versucht das wieder in Dein Coding aufzunehmen, aber irgendwas ist noch falsch! Hast Du ne Idee?


Sub BuKrAbgleichenNEU()

Dim rngFound  As Range  
Dim rngZelle1 As Range  
Dim strBuKr As String  
Dim strSuchbegriff As String  
'---------------------
 
    Sheets("Zuordnung SKTO_BuKr").Cells(1, 1).Select
   
    For Each rngZelle1 In Range("SKTO")    
   
        strSuchbegriff = rngZelle1.Value
       
        Set rngFound = Sheets("Zuordnung SKTO_BuKr").Cells.Find(What:=strSuchbegriff, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False)      
       
Weitersuchen:
        If Not rngFound Is Nothing Then      'soll den Fehler 91 abfangen
            rngFound.Interior.ColorIndex = 3
            strBuKr = Cells(1, rngFound.Column).Value
               
            If IsEmpty(rngZelle1.Offset(0, 1)) = True Then    
                rngZelle1.Offset(0, 1) = strBuKr
            Else
                rngZelle1.End(xlToRight).Offset(0, 1) = strBuKr  
            End If  
        End If  
       
        Set rngFound = Nothing  
        Set rngFound = Sheets("Zuordnung SKTO_BuKr").Cells.FindNext(After:=ActiveCell).Activate  
        If ActiveCell.Interior.ColorIndex = 3 Then GoTo NächsteZelle    
        GoTo Weitersuchen  
       
NächsteZelle:
    Next rngZelle1

End Sub  

Vielen Dank!

Gruss Steph@n

nach oben   nach unten

mit weitersuchen
von: mathias r.
Geschrieben am: 14.05.2002 - 11:31:56


Sub BuKrAbgleichenNEU()
Dim rngFound  As Range
Dim rngZelle1 As Range
Dim strBuKr As String
Dim strSuchbegriff As String
'---------------------

  For Each rngZelle1 In Range("SKTO")

    strSuchbegriff = rngZelle1.Value
    
    Set rngFound = Sheets("Zuordnung SKTO_BuKr").Cells.Find(What:=strSuchbegriff, LookIn:=xlValues, _
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
       MatchCase:=False)
    
    Do Until rngFound Is Nothing
      rngFound.Interior.ColorIndex = 3
      strBuKr = Cells(1, rngFound.Column).Value
          
      If IsEmpty(rngZelle1.Offset(0, 1)) = True Then
          rngZelle1.Offset(0, 1) = strBuKr
      Else
          rngZelle1.End(xlToRight).Offset(0, 1) = strBuKr
      End If
    
      Set rngFound = Sheets("Zuordnung SKTO_BuKr").Cells.FindNext(After:=rngFound)
      If rngFound.Interior.ColorIndex = 3 Then Exit Do
    Loop
  Next
End Sub


nach oben   nach unten

Danke es funkt! :-) o.T.
von: Steph@n
Geschrieben am: 14.05.2002 - 13:16:50


 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Formeln nach unten kopieren bis anzugebender Zeile"