Thema Datum  Von Nutzer Rating
Antwort
Rot Mails in Ordner kopieren & verschieben - Makro optimieren
03.07.2024 00:02:49 Kisska
Solved
03.07.2024 00:06:50 Gast42158
NotSolved
03.07.2024 02:59:03 ralf_b
NotSolved
03.07.2024 10:53:10 Kisska
NotSolved
03.07.2024 11:47:20 ralf_b
*****
Solved
07.07.2024 17:06:43 Kisska
Solved

Ansicht des Beitrags:
Von:
Kisska
Datum:
03.07.2024 00:02:49
Views:
110
Rating: Antwort:
 Nein
Thema:
Mails in Ordner kopieren & verschieben - Makro optimieren

Hallo zusammen,

ich habe folgende Aufgabe: In Outlook markierte E-Mails sollen in einen Zielordner einkopiert werden, dessen Namen man im Abfragefesnter einträgt. Danach sollen die Originalmails in den Ordner '_01_erhalten' verschoben werden.

Folgende Makros stehen mir zur VErfügung:

Makro 1: Funktioniert nur für eine markierte Mail

Sub CopySelectedEmailToFolderAndMoveToReceived()
    Dim olApp As Outlook.Application
    Dim olNamespace As Outlook.NameSpace
    Dim olSelection As Outlook.Selection
    Dim olMail As Outlook.mailItem
    Dim olMailCopy As Outlook.mailItem
    Dim olDestFolder As Outlook.MAPIFolder
    Dim olReceivedFolder As Outlook.MAPIFolder
    Dim folderName As String
    Dim foundFolder As Outlook.MAPIFolder

    ' Initialisiere die Outlook-Anwendung und den Namespace
    Set olApp = Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")

    ' Hole die ausgewählte E-Mail
    Set olSelection = olApp.ActiveExplorer.Selection

    If olSelection.Count = 0 Then
        MsgBox "Bitte wählen Sie eine E-Mail aus.", vbExclamation
        Exit Sub
    End If

    ' Nur fortfahren, wenn eine E-Mail ausgewählt ist
    If TypeOf olSelection.Item(1) Is Outlook.mailItem Then
        Set olMail = olSelection.Item(1)

        ' Ordnername abfragen
        folderName = InputBox("Bitte geben Sie den Namen des Zielordners ein:", "Zielordner auswählen")

        If folderName = "" Then
            MsgBox "Kein Ordnername eingegeben. Vorgang abgebrochen.", vbExclamation
            Exit Sub
        End If

        ' Suche den Zielordner
        Set foundFolder = FindFolder(olNamespace.folders, folderName)

        If Not foundFolder Is Nothing Then
            ' Kopiere die E-Mail in den gefundenen Ordner
            Set olMailCopy = olMail.Copy
            olMailCopy.Move foundFolder
            MsgBox "Die E-Mail wurde erfolgreich in den Ordner '" & foundFolder.Name & "' kopiert.", vbInformation

            ' Suche den Unterordner "_01_erhalten"
            Set olReceivedFolder = FindFolder(olNamespace.folders, "_01_erhalten")

            If Not olReceivedFolder Is Nothing Then
                ' Verschiebe die E-Mail in den Unterordner "_01_erhalten"
                olMail.Move olReceivedFolder
                MsgBox "Die E-Mail wurde erfolgreich in den Ordner '_01_erhalten' verschoben.", vbInformation
            Else
                MsgBox "Der Ordner '_01_erhalten' wurde nicht gefunden.", vbExclamation
            End If
        Else
            MsgBox "Der Ordner '" & folderName & "' wurde nicht gefunden.", vbExclamation
        End If
    Else
        MsgBox "Bitte wählen Sie eine E-Mail aus.", vbExclamation
    End If

    ' Bereinigen
    Set olApp = Nothing
    Set olNamespace = Nothing
    Set olSelection = Nothing
    Set olMail = Nothing
    Set foundFolder = Nothing
    Set olReceivedFolder = Nothing
End Sub

Function FindFolder(folders As Outlook.folders, folderName As String) As Outlook.MAPIFolder
    Dim folder As Outlook.MAPIFolder
    Dim subFolder As Outlook.MAPIFolder

    On Error Resume Next

    ' Durchlaufe alle Ordner
    For Each folder In folders
        If folder.Name = folderName Then
            Set FindFolder = folder
            Exit Function
        End If
        ' Rekursiver Aufruf für Unterordner
        Set subFolder = FindFolder(folder.folders, folderName)
        If Not subFolder Is Nothing Then
            Set FindFolder = subFolder
            Exit Function
        End If
    Next folder
End Function

Makro 1: Funktioniert für mehrere markierte Mails

Sub CopyAndMoveEmails()
    Dim olApp As Outlook.Application
    Dim olNamespace As Outlook.NameSpace
    Dim olSelection As Outlook.Selection
    Dim destFolderName As String
    Dim destFolder As Outlook.folder
    Dim receivedFolder As Outlook.folder
    Dim mailItem As Object
    Dim i As Integer

    ' Initialize Outlook objects
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olSelection = olApp.ActiveExplorer.Selection

    ' Prompt user for destination folder name
    destFolderName = InputBox("Enter the name of the destination folder:", "Destination Folder")

    ' Check if user input is empty
    If destFolderName = "" Then
        MsgBox "No destination folder specified.", vbExclamation
        Exit Sub
    End If

    ' Find the destination folder
    Set destFolder = FindFolder(olNamespace.folders, destFolderName)

    If destFolder Is Nothing Then
        MsgBox "The destination folder """ & destFolderName & """ does not exist.", vbExclamation
        Exit Sub
    End If

    ' Find the "_01_erhalten" folder
    Set receivedFolder = FindFolder(olNamespace.folders, "_01_erhalten")

    If receivedFolder Is Nothing Then
        MsgBox "The folder ""_01_erhalten"" does not exist.", vbExclamation
        Exit Sub
    End If

    ' Process each selected email
    For i = 1 To olSelection.Count
        If TypeOf olSelection.Item(i) Is Outlook.mailItem Then
            Set mailItem = olSelection.Item(i)
            ' Copy the email to the destination folder
            On Error Resume Next
            mailItem.Copy.Move destFolder
            If Err.Number <> 0 Then
                MsgBox "Error copying email: " & Err.Description, vbExclamation
                Exit Sub
            End If
            On Error GoTo 0

            ' Move the original email to the "_01_erhalten" folder
            On Error Resume Next
            mailItem.Move receivedFolder
            If Err.Number <> 0 Then
                MsgBox "Error moving email: " & Err.Description, vbExclamation
                Exit Sub
            End If
            On Error GoTo 0
        End If
    Next i

    ' Display success message
    MsgBox "Emails copied to """ & destFolderName & """ and moved to ""_01_erhalten"" successfully.", vbInformation
End Sub

Function FindFolder(parentFolders As Outlook.folders, folderName As String) As Outlook.folder
    Dim folder As Outlook.folder
    Dim subFolder As Outlook.folder

    On Error Resume Next
    ' Iterate through each folder to find the matching folder
    For Each folder In parentFolders
        If folder.Name = folderName Then
            Set FindFolder = folder
            Exit Function
        Else
            Set subFolder = FindFolder(folder.folders, folderName)
            If Not subFolder Is Nothing Then
                Set FindFolder = subFolder
                Exit Function
            End If
        End If
    Next folder
    On Error GoTo 0

    ' If not found, return Nothing
    Set FindFolder = Nothing
End Function

 

Problem: Das 2. Makro funktioniert nur, wenn man es aus dem VBA-Editor ausführt, nicht wenn man über das Menüband auf Makros geht.

Waran liegt es? Beim 1. Makro klappt es ja auch aus dem Menüband.

Falls jemand das Makro anpassen könnte, gerne auch optimieren, wäre ich sehr dankbar.

 

VG

Kisska

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Mails in Ordner kopieren & verschieben - Makro optimieren
03.07.2024 00:02:49 Kisska
Solved
03.07.2024 00:06:50 Gast42158
NotSolved
03.07.2024 02:59:03 ralf_b
NotSolved
03.07.2024 10:53:10 Kisska
NotSolved
03.07.2024 11:47:20 ralf_b
*****
Solved
07.07.2024 17:06:43 Kisska
Solved