Email Exception Handling

Tekkion

Mitglied
Moin allerseits,

ich habe ein Makro erstellt welches emails innerhalb eines Ordners ausließt und den Betreff falls es eine Zahl ist in eine Excel Datei schreibt.

dazu folgende deklaration:
Code:
Dim ns As Outlook.NameSpace
    Set ns = GetNamespace("MAPI")
    Dim Folder As Outlook.MAPIFolder
    
    Dim objNewMail As MailItem

und folgende schleife:
Code:
For Each objNewMail In Folder.Items
        emails = emails + 1
        Tickets = Zahlenauslesen(objNewMail.Subject)....

nur habe ich jetzt das Problem, dass falls es sich bei der "email" um eine Systembenachrichtigung, Termin oder ähnliches handelt das Makro abbricht. Mir fällt leider nicht ein wie ich dieses Problem lösen könnte drum frage ich euch ob ihr eine Idee habt.
 
Versuch es mal mit folgendem

Visual Basic:
On Error Goto MailErr:

weiter unten dann
Visual Basic:
 exit function ' oder sub je nach dem 
 MailErr:
 If err.number =  then ' usw
Grüsse bb
 
Problem hat sich wohl anscheinend doch nicht erledigt ich bekomm noch immer in einem Ordner eine Error Message Typen unverträglich der Debugger zeigt aufs Next.
Ich poste jetzt einfach mal den ganzen code.
Code:
Public Sub TTauslesen()

' Variablen-Deklaration________________________________________________________________________________________
    Dim Dateiname As String

' Ordner Auswählen_____________________________________________________________________________________________
    Dim ns As Outlook.NameSpace
    Set ns = GetNamespace("MAPI")
    Dim Folder As Outlook.MAPIFolder
    
    Dim objNewMail As MailItem
    Dim indb As Boolean
    Dim emails As Integer
    Dim Tickets As String
    Dim TTDB(999) As String
    Dim finaltt() As String
    Set objexcel = CreateObject("Excel.Application")
    
    Dim startdat As Date
    Dim enddat As Date
    
    If MsgBox("Wollen Sie einen bestimmten Zeitraum durchsuchen", 4, "Warning") = vbYes Then
        startdat = InputBox("Bitte Anfangsdatum mit Uhrzeit eingeben:", "Datum", "01.01.2006 00:00")
        enddat = InputBox("Bitte Enddatum mit Uhrzeit eingeben:", "Datum", Date + Time)
        zeitraum = True
    Else
        zeitraum = False
    End If
    If zeitraum = False Then
        If MsgBox("Wollen Sie nach einen bestimmten Betreff suchen", 4, "Warning") = vbYes Then
            Text = InputBox("Bitte den Betreff angeben nach dem gesucht werden soll:")
            Betreff = True
        Else
            Betreff = False
        End If
    End If
        
    Dateiname = InputBox("Bitte geben Sie den Dateinamen zum Speichern an (Speicherort = H:\):", "Dateinamen", "Ticketnummern.xls")
    objexcel.Visible = False
    objexcel.Workbooks.Add

    Dim i As Integer
    Dim x As Integer
    Dim y As Integer
    Dim z As Integer
    z = 1
    i = 1
    x = 0
    y = 0
    indb = True
    

    
' Ordnerdeklaration im Posteingang_______________________________________________________________________________
    Set Folder = ns.PickFolder
   
' Die Schleife behandelt jedes Mail, dass sich zum Startzeitpunkt
' der Prozedur im Posteingang befand_____________________________________________________________________________
    MsgBox "Emails werden durchsucht. dieser Vorgang dauert einige Minuten. Bitte warten..."
    
    emails = 0
     For Each objNewMail In Folder.Items
        On Error GoTo MailErr:
        emails = emails + 1
        Tickets = Zahlenauslesen(objNewMail.Subject)

        If (Tickets <> "") Then
            finaltt = Split(Tickets)
            y = 0
            z = 1
            Datum = False
            While y < UBound(finaltt)
                
                If finaltt(y) <> "" And Len(finaltt(y)) >= 13 And zeitraum = False And Betreff = False Then
                    indb = vorhanden(finaltt(y), TTDB())
                    If indb = False Then
                        objexcel.cells(i, z).Value = "SR" + finaltt(y)
                        z = z + 1
                        Datum = True
                    End If
                End If
                
                If finaltt(y) <> "" And Len(finaltt(y)) >= 13 And zeitraum = True And Betreff = False Then
                    indb = vorhanden(finaltt(y), TTDB())
                    datecorrect = Datechecker(startdat, enddat, objNewMail.CreationTime)
                    If indb = False And datecorrect Then
                        objexcel.cells(i, z).Value = "SR" + finaltt(y)
                        z = z + 1
                        Datum = True
                    End If
                End If
                y = y + 1
            Wend
            If Datum = True Then
                objexcel.cells(i, 4).Value = objNewMail.CreationTime
                i = i + 1
            End If
            
        End If
MailErr:
    Next
    objexcel.ActiveWorkbook.SaveAs ("H:\" + Dateiname)
    objexcel.Quit
    Set objexcel = Nothing
end sub

ist nicht sehr schön aber das ist auch mein erstes vb project überhaupt und mein erstes programmieren seit einem Jahr. :)
 
Zuletzt bearbeitet:
Setz mal ein

Visual Basic:
Err.Clear

vor dein Next

(da du ja scheinbar keine dedizierte Fehlerbehandlung machen willst)

Grüsse bb
 
mittlerweile ist ein anderes Problem aufgetaucht... und da ich die funktionsweise erstmal umbauen musste müsste ich erst dieses lösen.

Die Frage die ich habe ist ob es möglich ist objekte an Funktionen zu übergeben den falls dieses nicht der fall ist müsste ich innerhalb der Funktion jedesmal eine excel instanz erzeugen was bei meinem ersten Versuch die Makro-Laufzeit auf 25min verlängert hat.

Oder ob Objekte Global bekannt sind und somit auch in den Funktionen benutzt werden können da ich die Fehlermeldung bekomme: Laufzeitfehler 424 Objekt erforderlich. Wenn ich wiederrum versuche das Objekt zu übergeben den Fehler byRef irgendwas. Könntet ihr mir vb neuling nochmals unter die arme greifen? :D
 
Ja, es ist möglich Objekte an funktionen zu übergeben.
Ja, es ist auch möglich Objekte global zu deklarieren ( hierfür gibt es zum Beispiel Public und Private ( auf ein modul bezogen))

wobei meiner Meinung nach die erste Methode die sauberere ist.

Grüsse bb
 
Kannst du mir dann vllt bei diesem Code helfen:

Deklaration in der "GUI"
Code:
   Set objknownExcelTable = CreateObject("Excel.Application")
    Set objWorkbook = objknownExcelTable.Workbooks.Open(Dateiname2)
    Set objWorksheet = objWorkbook.Worksheets(1)

und der Aufruf inna Funktion:

Code:
While objWorksheet.Cells(i, 2).Value <> "" And objWorksheet.Cells(i + 1, 2).Value <> "" Or abbruch = True

Fehlermeldung: Objekt erforderlich welche ich nicht ganz nachvollziehen kann. Jeweils die Sub und die Func sind Public. Gibt es in VB sowas wie "Public Dim"?
 
Zurück