# Excel VBA - auf Email antworten (Schleife)



## jerry0110 (27. Mai 2020)

Hallo zusammen,

ich habe in meinem Postfach 100 Mails und diese möchte ich mit einem Standardtext beantworten.

Auslesen vom Postfach bekomme ich hin. Aber nicht das reply von der gefundenen Email:


```
Option Explicit

Public Sub mailTest()
    Const C_MAPI = "jerry5428@hotmail.com"
    Const C_FOLDER = "Posteingang"
    Const C_Test = "Test"
 
    'Das Test-Mail auslesen
    Dim otl As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim fld As Outlook.MAPIFolder
    Dim mail As Outlook.MailItem
    Set otl = New Outlook.Application
    Set ns = otl.GetNamespace("MAPI")
    Set fld = ns.Folders(C_MAPI).Folders(C_FOLDER).Folders(C_Test)
 
    For Each mail In fld.Items
        If mail.ReceivedTime Like "*21.02.2020*" Then

            xxxxxxxxxxxxxxxxxxxxxxxxx

        End If
    Next
End Sub
```


Habe zwar was im Netz gefunden....versteh da aber wirklich nur Bahnhof. Und ich denke, dass man das in ein Makro machen kann. Und nicht in 3. 


```
Public Sub Reply_1()
  Dim Subject As String, Msg As String

  Subject = "Re: "
  Msg = "Beispiel-Text 1"

  ReplyMail Subject, Msg
End Sub

Private Sub ReplyMail(Subject As String, Msg As String)
  Dim obj As Object
  Dim oReply As Outlook.MailItem

  If TypeOf Application.ActiveWindow Is Outlook.Inspector Then
    Set obj = Application.ActiveInspector.CurrentItem
  Else
    With Application.Selection
      If .Count Then
        Set obj = .Item(1)
      End If
    End With
  End If

  If obj Is Nothing Then Exit Sub

  If TypeOf obj Is Outlook.MailItem Then
    Set oReply = obj.Reply
    If InStr(1, oReply.Subject, Subject, vbTextCompare) = 0 Then
      oReply.Subject = Subject & obj.Subject
      oReply.Body = Msg & vbCrLf & vbCrLf & oReply.Body
    End If
    oReply.Display
  End If
End Sub
```


----------



## Yaslaw (28. Mai 2020)

Das ist eine andere Herleitung. Der grösste Teil des 2ten COdes brauchst du nicht. Nur der letzte Teil ist interessant.

```
If TypeOf obj Is Outlook.MailItem Then
    Set oReply = obj.Reply
    If InStr(1, oReply.Subject, Subject, vbTextCompare) = 0 Then
      oReply.Subject = Subject & obj.Subject
      oReply.Body = Msg & vbCrLf & vbCrLf & oReply.Body
    End If
    oReply.Display
  End If
End
```
Das Objekt `obj`heisst bei dir `mail`


----------



## jerry0110 (28. Mai 2020)

Yaslaw hat gesagt.:


> Das ist eine andere Herleitung. Der grösste Teil des 2ten COdes brauchst du nicht. Nur der letzte Teil ist interessant.
> 
> ```
> If TypeOf obj Is Outlook.MailItem Then
> ...



Wenn ich den Code oben einsetze und dann das Objekt "obj" durch "mail" ersetze habe ich ja noch das Mailitem oReply. Das muss ich doch dann auch definieren? Oder steh ich jetzt auf dem Schlauch?

Ich muss doch auch nicht mit TypeOf beginnen. Oder?


----------



## Yaslaw (29. Mai 2020)

Natürlich das noch definieren.
Ich habe keinen fertigen Code geposted, das ist dein Job.


----------



## jerry0110 (29. Mai 2020)

Yaslaw hat gesagt.:


> Natürlich das noch definieren.
> Ich habe keinen fertigen Code geposted, das ist dein Job.



Nach langem überlegen hat es click gemacht 


```
For Each mail In fld.Items
  
        If TypeOf mail Is Outlook.MailItem Then
            Set oReply = mail.Reply
                If InStr(1, oReply.Subject, Subject, vbTextCompare) = 0 Then
                    oReply.Subject = Subject & mail.Subject
                    oReply.Body = Msg & vbCrLf & vbCrLf & oReply.Body
                End If
             oReply.Display
        End If
```

oReply hab ich mit 
	
	
	



```
Dim oReply As Outlook.MailItem
```
 definiert

Hatte einen Denkfehler, weil ich gedacht habe das mail und oReply nicht die gleichen Definitionen haben können bei einer Mail.


----------



## jerry0110 (17. Juni 2020)

Hi,

ich habe doch noch eine Frage. 


```
For Each mail In fld.Items
 
        If TypeOf mail Is Outlook.MailItem Then
            Set oReply = mail.Reply
                If InStr(1, oReply.Subject, Subject, vbTextCompare) = 0 Then
                    oReply.Subject = Subject & mail.Subject
                    oReply.Body = Msg & vbCrLf & vbCrLf & oReply.Body
                End If
             oReply.Display
        End If
```

Wenn ich beim Punkt "oReply.Body = Msg & vbCrLf & vbCrLf & oReply.Body" bin, wird der oReply.Body als Textform ausgegeben. Heißt, dass alle Wörter nacheinander geschrieben werden ohne Absatz. Also so wie die Mail zu mir gekommen ist, wird das Format nicht übernommen. Wie kann ich das ändern?


----------

