VBA mail merge, send on behalf of

Status
Niet open voor verdere reacties.

tomswaelen

Gebruiker
Lid geworden
8 dec 2004
Berichten
349
Ik heb een code waarmee ik mail merges vanuit Word verstuurd, zie hieronder. Nu vroeg ik me af of het mogelijk is om met deze code ook te versturen vanuit een andere mailbox, uiteraard een mailbox waar de user rechten op heeft. De user kan deze mailbox in Outlook kiezen bij een nieuw bericht in het From-veld.

Tot nu toe losten we dit op door voor die mailbox een apart Outlook profiel aan te maken, en Outlook dan op te starten vanuit dat profiel, zodat die mailbox de standaardmailbox was. Misschien kan dit echter ook vanuit de code gebeuren? Dat zou wel wat tijd besparen natuurlijk.

Code:
Private Sub Maimerge()


    Dim wdApp As Object
    Dim wdDoc As Object
    ' Get the Word application
    Set wdApp = GetObject(Class:="Word.Application")
    ' Get the active document
    Set wdDoc = wdApp.ActiveDocument
    With wdDoc.MailMerge
        .Destination = 2 ' wdSendToEmail
        .MailSubject = "Uw aanvraag"
        .MailAddressFieldName = "Emailadres"
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = 1 ' wdDefaultFirstRecord
            .LastRecord = -16 ' wdDefaultLastRecord
        End With
        
        .Execute Pause:=False

    End With
 
Als je de code vanuit een Outlook sessie start, moet het wel kunnen. Vanuit de Word routine kan het niet, Word kent geen SendOnBehalf. Daarvoor moet je naar Outlook.
 
Ik gebruik in Excel voor Outlook dit om het account waarmee moet worden verzonden te bepalen:
Code:
    Dim OutApp As Object
    Dim OutMail As Object
    Dim OutAccount As Object
    
    Set OutApp = CreateObject("Outlook.Application")
    
    [COLOR="#008000"]'Bepaal het te gebruiken verzender account ---------------------[/COLOR]
    For i = 1 To OutApp.Session.Accounts.Count
        If OutApp.Session.Accounts.Item(i) = [COLOR="#FF0000"]"edmoor@helpmij.nl"[/COLOR] Then
            Set OutAccount = OutApp.Session.Accounts.Item(i)
        End If
    Next i
    If OutAccount Is Nothing Then
        MsgBox "Het gezochte account werd niet gevonden", vbCritical, "Account niet gevonden"
        Set OutApp = Nothing
        Exit Sub
    End If
    [COLOR="#008000"]'----------------------------------------------------------------[/COLOR]

Vervolgens gebruik je dat zo in de te verzenden mail:
Code:
    Set OutMail = OutApp.CreateItem(olMailItem)
    With OutMail
        .To = MailAdres
        .CC = ""
        .BCC = ""
        .Subject = MailOnderwerp
        .Body = MailBody
        [COLOR="#FF0000"] Set .SendUsingAccount = OutAccount[/COLOR]
        [COLOR="#008000"]'.Attachments.Add ActiveWorkbook.FullName[/COLOR]
        .Display [COLOR="#008000"]'Of .Send[/COLOR]
    End With
 
Laatst bewerkt:
Ja, maar hiermee gebruik je nog altijd een Outlook-object, niet? Heel mijn setup is er op opgezet, dat de tekst in Word staat, de merge fields staan daar ook in. Hier staat de mailbody in de code.

Ik heb al wat afgezocht op internet, maar zoals hierboven ook staat, Word lijkt een send from niet te ondersteunen.
 
Het voorbeeld dat ik plaatste kan je gewoon in Word VBA gebruiken.
Het lijkt me logisch dat je de variabele waarden zoals het mail adres, het onderwerp en de body vervangt door wat je in je Word document hebt staan.
 
Laatst bewerkt:
Ja, maar met de VBA code kan je dan enkel platte tekst sturen, niet?

Dus wat je hier zet: .Body = MailBody -> Mailbody kan enkel platte tekst zijn, niet?

Ik werk net graag met Word, omdat je daar met opmaak en afbeeldingen kan werken.
 
Je kan in plaats van .Body ook .HTMLBody gebruiken waarin je dan opgemaakte tekst plaatst.
Of je mailt het Word document als bijlage.

Of misschien is dat wat voor je?
https://kb.uwstout.edu/page.php?id=55865
 
Laatst bewerkt:
Dat laatste is dus inderdaad wat we nu doen :) Beetje omslachtig, maar niet onoverkomelijk.

Het Word-doc op zich is met vrij veel opmaak en afbeeldingen. Dat allemaal in HTML gaan gieten zie ik niet zitten. Dan doen we gewoon verder zoals we bezig zijn :)
 
Ik ben er even mee aan het spelen geweest.
Dit maakt een nieuwe email waarbij Verzenden als wordt gebruikt en de inhoud van het actieve Word document in de body wordt gezet, inclusief formatting en plaatjes:
Code:
Sub Word2Outlook()
    Dim oOutApp As Object
    Dim oMailItem As Object
    Dim oWordDoc As Object
    Dim oMailWordDoc As Object
    Dim OutAccount As Object
    
    Set oOutApp = CreateObject("Outlook.Application")
    
    [COLOR="#008000"]'Bepaal het te gebruiken verzender account ---------------------[/COLOR]
    For i = 1 To oOutApp.Session.Accounts.Count
        If oOutApp.Session.Accounts.Item(i) = "[COLOR="#FF0000"]tomswaelen@helpmij.n[/COLOR]l" Then
            Set OutAccount = oOutApp.Session.Accounts.Item(i)
        End If
    Next i
    If OutAccount Is Nothing Then
        MsgBox "Het gezochte account werd niet gevonden", vbCritical, "Account niet gevonden"
        GoTo Opruimen
        Exit Sub
    End If
    [COLOR="#008000"]'----------------------------------------------------------------[/COLOR]
    
    Set oWordDoc = ActiveDocument
    oWordDoc.Content.Copy
    Set oMailItem = oOutApp.CreateItem(0)
    With oMailItem
        .To = "[COLOR="#FF0000"]edmoor@helpmij.nl[/COLOR]"
        .Subject = "Het onderwerp"
        Set .SendUsingAccount = OutAccount
        .Display
    End With
    
    Set oMailWordDoc = oOutApp.ActiveInspector.WordEditor
    oMailWordDoc.Application.Selection.Paste
     
Opruimen:
    Set OutAccount = Nothing
    Set oMailWordDoc = Nothing
    Set oMailItem = Nothing
    Set oOutApp = Nothing
    Set oWordDoc = Nothing
End Sub
 
Laatst bewerkt:
Originele oplossing :) Ik heb de code even geprobeerd, maar hij zegt telkens dat hij de account niet heeft gevonden. Ik heb er nochtans zeker toegang toe, ik heb het ook op verschillende schrijfwijzen geprobeerd (bv. met of zonder hoofdletter, met of zonder domeinnaam). Ik heb het adres gezet waar jij in de code hierboven het in het rood hebt gezet.
 
Het moet uiteraard wel een bestaand account in Outlook zijn.
Als de code zegt dat het opgegeven account niet bestaat dan is dat echt zo.
Email adressen zijn trouwens nooit hoofdletter gevoelig.
 
Ik ben 200% zeker dat ik toegang heb tot het account :) Ik kan het adres invullen bij een nieuw bericht bij From, het gaat om een gedeelde mailbox waar nog andere mensen ook toegang tot hebben.

Maar manueel kan ik er dus zonder problemen mee versturen....
 
Ik geloof direct dat je dat zeker weet, maar de code kan dat account dus niet vinden.
Daar kan ik niets aan veranderen.
Geen idee of dat iets te maken heeft met de gedeelde mailbox.
Maar je kan toch zien welke accounts beschikbaar zijn?

Gebruik daar anders even dit voor:
Code:
Sub olAccounts()
    Dim oOutApp As Object
    Dim accs As String
    
    Set oOutApp = CreateObject("Outlook.Application")
    For i = 1 To oOutApp.Session.Accounts.Count
        accs = accs & oOutApp.Session.Accounts.Item(i) & vbCrLf
    Next i
    MsgBox accs
End Sub
 
En inderdaad, daar laat hij dus enkel mijn persoonlijke account zien, niet de mailbox.... Geen idee hoe dit komt, de gezochte mailbox is een account waar ik op allerlei manieren toegang tot heb (dus ook From-zenden), geen idee waarom hij die dus niet ziet.
 
Waarschijnlijk gaat het dan om 1 account met meerdere aliassen.
 
Nee hoor, het is echt een apart account :) Ik kan er mails naar sturen, en andersom. Die komen in Outlook niet in dezelfde mailbox terecht. Het is echt een andere mailbox.

Misschien dat dit bij ons bedrijf dan anders opgezet is? Al zie ik niet direct hoe....
 
Andere mailbox inderdaad, maar dus geen ander account in dezelfde Outlook.
Anders zouden die echt worden getoond.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan