VisualBasic On Error springt nicht weiter

scue

Cadet 4th Year
Registriert
Aug. 2008
Beiträge
68
Hey Jungs und Mädels,

ich bräuchte einmal eure Hilfe :)

Im Nachstehendem Code, soll wenn betreffteil(4) leer ist zu naechsteMail gesprungen werden. Leider funktioniert das nur beim ersten Durchlauf. Beim zweiten Durchlauf wird die On Error zwar durchlaufen, aber es passiert nichts, er scheint die Meldung einfach zu ignorieren. aber er müsste beim ersten und zweiten durchlauf runter springen. ich versteh einfach nicht wieso?

kann mir jemand helfen?

PHP:
For Each mailItem In objFolder.Items
    If TypeName(mailItem) = "MailItem" Then
    
     Betreff = mailItem.Subject
     betreffteil = Split(Betreff, "_")
     On Error GoTo naechsteMail
        If (betreffteil(4) = sachverhalt) Then
           MsgBox "Toll"
        End If
        
        'Absender = mailItem.SenderName
        'Eingangsdat = mailItem.ReceivedTime
        'Cells(3, 2).Value = Eingangsdat
        'AttachedFile = mailItem.Attachments.Item(1)
        'mailItem.Attachments.Item(1).Open
        End If
       
naechsteMail:
 End If
 Next mailItem
 
Probier doch mal den "On Error"-Teil vor Beginn der For-Schleeife zu setzen. Du führst diese Zeile immer und immer wieder aus. Das ist meines Wissens nicht nötig.
 
Kannste sowas nicht ohne Error und GoTo lösen?
Ich finde das ist schlechter Stil.

Frag doch einfach mit UBound ab ob es überhaupt einen 4. Betreffteil gibt. Wenn ja, schaust du ob er = "" ist. Schon haste die Info ob du zur nächsten Mail gehen musst oder nicht.
 
MacGyver schrieb:
Kannste sowas nicht ohne Error und GoTo lösen?
Ich finde das ist schlechter Stil.

So siehts aus!

Aber meines Erachtens fehlt da noch ein "Resume", wenn es schon so sein soll.

Wenn der Fehler das erste Mal auftritt, befindest Du Dich quasi die ganze Zeit in der Fehlerbehandlung, wenn mich nicht alles täuscht.
 
Ich habe es gerade mal in VBA (Excel 2007) nachgebaut und ausprobiert.

Es ist wirklich so, dass er 1x zum Fehlerlabel springt und beim zweiten Mal den Fehler nicht mehr behandelt, sondern mit einer Ausnahme abbricht. Weiß nicht ob das in VB auch so ist, aber ich vermute es mal.

Möglicherweise kann On Error nur 1x pro Funktion verwendet werden. Die Funktion wird ja nie verlassen, weil es eine Schleife gibt. Ich probiere es mal aus indem ich die Analyse des Arrays in eine Extrafunktion auslagere.

EDIT: So, ich habe das Beispiel mal aufgesplittet. Habe leider keine MailItems-Auflistung, daher müssen ein paar simple Strings reichen. Die OnError-Geschichte funktioniert so jedenfalls.
Angesichts des Aufwandes und der komplexität würde ich aber auf OnError verzichten, wie ich oben schon schrieb.

Code:
Option Base 1
Const sachverhalt As String = "Zauberwort"

Sub bla()

Dim betr(3) As Variant


Dim isOK As Boolean

betr(1) = "Hallo_Du_Nase"
betr(2) = "Wie_geht_es_dir_heute"
betr(3) = "Ich_weiß_das_richtige_Zauberwort"

Dim iter As Variant

For Each iter In betr
    If IsSubjectOK(iter) = True Then
       MsgBox "Toll"
    End If
Next

End Sub

Function IsSubjectOK(ByVal Betreff As String) As Boolean
On Error GoTo NOK

Dim betreffteil() As String
betreffteil = Split(Betreff, "_")

If betreffteil(4) = sachverhalt Then
    IsSubjectOK = True
    GoTo ENDE
End If

NOK:
IsSubjectOK = False

ENDE:
End Function
 
Zuletzt bearbeitet:
hi,

vielen dank. habe jetzt auch auf on error verzichtet und eine inStr abfrage gemacht. ist zwar nicht komplett dasselbe wie ursprünglich gewünscht, aber sollte trotzdem hinhauen.

Eine Frage noch. Wie kann ich zwischen mehreren Excel Workbooks hin und her springen.

Code:
zieldatei = ActiveWorkbook.name
ExcelSheet.Application.Workbooks.Open Filename:=Filename, Local:=True
quelldatei = ActiveWorkbook.name
Windows(quelldatei).Activate

funktioniret leider nicht so
 
Zurück
Oben