• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Vanuit Excel pdf maken van specifieke pagina en in email in outlook klaar zetten

Status
Niet open voor verdere reacties.

Sanremo

Gebruiker
Lid geworden
27 mrt 2018
Berichten
41
Beste forumleden!

Ik heb een vraag over het volgende.
In 1 excel bestand maak ik zowel een prijsberekening, offerte en pro forma.

In grote lijnen werkt het als volgt:

Op pagina 1 voer ik alle klant gegevens in
Op Pagina 2 en 3 maak ik een prijsberekening (optie a en optie b)
Op pagina 4 en 5 worden offertes gemaakt met de gegevens van pagina 1 en 2-3
Op pagina 6 en 7 gebeurd hetzelfde als op pagina 4 en 5 maar dan met extra gegevens van pagina 1

Nu zou ik graag op beide offerte pagina's én op beide pro forma pagina's een knop toevoegen om automatisch een .pdf van de betreffende pagina te maken en vervolgens een email bericht te openen met automatisch het email adres van de klant ingevuld, het onderwerp (vooraf ingegeven op pagina 1) ingevuld en het pdf van de betreffende pagina als bijlage toegevoegd.

Ik heb iets rond gezocht en geprobeerd met mijn schaarse VBA kennis, maar heb tot noch toe niet kunnen bereiken wat ik wil :confused:

Wie kan en wil mij helpen? :d
 
Bij het gebruik van VBA gaat het niet om grote lijnen maar om precisie.
Plaats dus een voorbeeld bestand.
 
Kijk eens op deze pagina, daar vind je de noodzakelijke code.
 
Bij deze een voorbeeld bestandje! :)

Ik heb dmv opmerkingen bij de betreffende cellen geprobeerd aan te geven wat ik (ideaal gezien) probeer te creeeren.

Voor alle duidelijkheid, het is de bedoeling dat er een nieuwe email word geopend, email adres, onderwerp worden ingevuld en een specifieke pagina in .pdf word toegevoegd als bijlage, maar dat de email als nieuw email ventster open blijft staan! Dus niet automatisch verzonden word. Ik wil zelf de tekst in de email per bericht kunnen typen :)
 

Bijlagen

Hiermee zou je uit de voeten moeten kunnen voor het blad Offerte A.
Code:
Sub Knop4_Klikken()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim PdfFile As String
    
    PdfFile = Environ("temp") & "\" & Format(Now(), "ddmmyyyyhhmmss") & ".pdf"
    Range("A1:L75").ExportAsFixedFormat Type:=Pdf, Filename:=PdfFile

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    With OutMail
        .To = "edmoor@helpmij.nl"
        .CC = ""
        .BCC = ""
        .Subject = "Het Onderwerp"
        .Body = "De tekst in het bericht."
        .Attachments.Add PdfFile
        .Display
    End With
End Sub
 
Laatst bewerkt:
Dit is perfect voor wat ik bedoel Edmoor, heel erg bedankt!

Graag zou ik wat variabelen toevoegen aan de code:

Sub Knop4_Klikken()
Dim OutApp As Object
Dim OutMail As Object
Dim PdfFile As String

PdfFile = Environ("temp") & "" & Format(Now(), "ddmmyyyyhhmmss") & ".pdf" (in plaats van een tijdelijk bestand een bestand met als naam "Offerte bedrijf 1" gevolgd door de waarde van cel D27 op het tabblad "Klant info" en daarna weer de datum van vandaag, dat word opgeslagen in de map zoals aangegeven in cel D28 van tabblad "Klant info")
Range("A1:L75").ExportAsFixedFormat Type:=Pdf, Filename:=PdfFile

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "Naar het emailadres dat in Cel D10 van tabblad "Klant info" staat"
.CC = ""
.BCC = ""
.Subject = ""Offerte" gevolgd door de tekst in Cel D12 van tabblad "Klant info" gevolgd door de datum van vandaag"
.Body = "De tekst in het bericht."
.Attachments.Add PdfFile
.Display
End With
End Sub

Ik ben heel benieuwd of en zo ja in hoeverre dit mogelijk is :)

In ieder geval al vast heel veel dank voor jullie hulp zover!! :thumb:
 
Zoiets dus:
Code:
Sub Knop4_Klikken()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim PdfFile As String
    Dim MailAdres As String
    Dim MailBody As String
    Dim MailOnderwerp As String
    
    PdfFile = Sheets("KLANT INFO").Range("D28") & _
              "\Offerte bedrijf 1 " & _
              Sheets("KLANT INFO").Range("D27") & _
              Format(Now(), "ddmmyyyyhhmmss") & ".pdf"
    
    MailAdres = Sheets("KLANT INFO").Range("D10")
    MailOnderwerp = "Offerte " & Sheets("KLANT INFO").Range("D12") & Format(Now(), "ddmmyyyyhhmmss")
    MailBody = "Dit is regel 1 in het bericht" & vbCrLf & _
               "En dit is regel 2" & _
               "Regel 3 enz...."
               
    Range("A1:L75").ExportAsFixedFormat Type:=Pdf, Filename:=PdfFile

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    With OutMail
        .To = MailAdres
        .CC = ""
        .BCC = ""
        .Subject = MailOnderwerp
        .Body = MailBody
        .Attachments.Add PdfFile
        .Display
    End With
End Sub
 
Dit is geweldig Edmoor!! Precies wat ik nodig heb! Mijn dank is groot :)

Het enige wat ik nog mis is dat de handtekening (die standaard word toegevoegd als ik in outlook gewoon een nieuwe email open) niet word toegevoegd als ik de macro uitvoer. Is dit mogelijk?

Nogmaals dank voor alle hulp!
 
Dat kan, maar moet je gaan werken met .HTMLBody in plaats van .Body en het handtekeningbestand van Outlook uit je userprofile toevoegen aan de mail body.
De mailbody moet dan bij voorkeur ook in HTML gemaakt zijn.

Het gaat om de bestanden in deze map:
Code:
C:\Users\Sanremo\AppData\Roaming\Microsoft\Signatures
 
Laatst bewerkt:
Het handtekening bestand is in html en opgeslagen alls .htm in inderdaad die map. Ondanks wat speuren (o.a. ook Ron de Bruin) krijg ik het niet voor elkaar het .htm handtekening bestand (mysignature.htm) toe te laten voegen met behoud van de huidige VBA code.
Als ik nog een laatste keer om hulp mag vragen :d

Ook heb ik nog een 2e vraag:
Onderstaande code heb ik als module opgeslagen en word opgeroepen door een knop op tabblad "Offerte A". Eigenlijk wil ik de code (of de in de code beschreven acties) automatisch laten uitvoeren bij openen van het tabblad (Offerte A). Echter loopt hij compleet vast. Ik vermoed omdat de code (ondanks dat ik heb geprobeerd zonder .select te werken zodat de Macro niet zelf tussen tabbladen wisselt) een loop creeerd door naar een ander tabblad te gaan en daarna weer terug naar het huidige tabblad (Offerte A), wat dezelfde macro weer start en resulteert in een oneindig verhaal en uiteindelijk vastlopen/ foutmelding.

Code:

Code:
Sub ProductenkopieA()
'
' ProductenkopieA
'
With Application
 
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .DisplayAlerts = False
    
End With
'

    Sheets("Berekening A").Range("F5:F10,F12:F16,F18:F23,F25:F29,F31:F37,F39:F45,F47:F53").Copy
    Sheets("KopiebladVBA").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("KopiebladVBA").Columns("A:A").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
    Sheets("KopiebladVBA").Range("A1:A25").Copy
    Sheets("Offerte A").Range("C28").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("KopiebladVBA").Columns("A:A").Delete


With Application
 
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    .DisplayAlerts = True
 
End With
        
End Sub

Mijn dank is groot!!
 
Laatst bewerkt:
Tip voor sanremo: kijk eens hoe de code er in de voorbeelden van de helpers uitziet, en vergelijk die met je eigen code. En zoek dan in de knoppenbalk de knop op waarmee jij jouw code (en doe ons een plezier, en doe dat met terugwerkende kracht) óók zo mooi kunt opmaken :). Zodat óók jouw berichten goed leesbaar worden :D
 
tweede tip @sanremo,

plaats dat bestand eens, zonder "gevoelige" info uiteraard.....
 
Voorbeeld mail met handtekening.
Vervang het rode gedeelte door de naam van je htm bestand.
Code:
Sub MailMetSig()
    Dim FixedHtmlBody As String
    Dim oOutMail As Object
    Dim oOutApp As Object
    Dim strbody As String
    Dim htmf As String
    Dim htmp As String

    htmf = "[COLOR="#FF0000"]Je handtekening.htm[/COLOR]"
    htmp = Environ("appdata") & "\Microsoft\Signatures\"
    
    FixedHtmlBody = FixHtmlBody(htmp & htmf)

    Set oOutApp = CreateObject("Outlook.Application")
    Set oOutMail = oOutApp.CreateItem(0)

    strbody = "<H3><B>Beste vriend</B></H3>" & _
              "Het is helemaal gelukt<br>" & _
              "<br><br><B>Dank je wel</B><br>" & FixedHtmlBody

    With oOutMail
        .To = "edmoor@helpmij"
        .CC = ""
        .BCC = ""
        .Subject = "Het onderwerp"
        .HTMLBody = strbody
        .Display
    End With

    Set oOutMail = Nothing
    Set oOutApp = Nothing
End Sub

Function FixHtmlBody(r As Variant) As String
    Dim FullPath As String, filename As String
    Dim FilenameWithoutExtn As String
    Dim foldername As String
    Dim MyData As String

    Open r For Binary As #1
    MyData = Space$(LOF(1))
    Get #1, , MyData
    Close #1

    filename = r
    FilenameWithoutExtn = Left(filename, (InStrRev(filename, ".", -1, vbTextCompare) - 1))
    foldername = FilenameWithoutExtn & "_files"

    FullPath = Left(r, InStrRev(r, "\")) & foldername
    FullPath = Replace(FullPath, " ", "%20")
    FixHtmlBody = Replace(MyData, foldername, FullPath)
End Function
 
Laatst bewerkt:
Bedankt voor de tips @Haije en @Octafish!
En bedankt voor de code @Edmoor

Bijgaand het bestandje.
Ik heb (in een ander bestand) geprobeerd de code van Edmoor toe te passen. De handtekening laad, echter de afbeeldingen er in worden niet geladen (kaders wel weergeven, "niet mogelijk afbeelding te laden").

De 2 dingen die ik voor elkaar probeer te krijgen zijn:
- De code van module "EmailofferteB" met al haar toevoegingen zoals variabele bestandsnamen, email onderwerp en mappen, mét de email handtekening zoals deze word geladen in de laatste code van Edmoor, maar dan met afbeeldingen :d
- Deze code uiteraard ook in module "EmailofferteA" met variabelen gebaseerd op moduleA.
- Dezelfde acties als bij EmailofferteA of B maar dan gebaseerd op variabele van "Emailproforma" bij uitvoeren van module "Emailproforma".

- Het automatisch laden van module "ProductenkopieA" bij het openen van tabblad "Offerte A", zonder dat deze vastloopt.
- Het automatisch laden van module "ProductenkopieB" bij het openen van tabblad "Offerte B", zonder dat deze vastloopt.

Belangrijk is dat de mappen (ook bij Emailproforma) nog zijn te wijzigen, mochten deze op de computer zelf worden gewijzigd.

In de hoop dat alles mogelijk is en met zeer veel dankbaarheid voor ieder die helpt!!
 

Bijlagen

Om ook de afbeeldingen er in te krijgen heb ik de echte gegevens nodig omdat dat een behandeling betreft die per handtekening verschilt.
Dus het xml bestand en de bijbehorende map met de afbeeldingen, met je echte gegevens.
Als je me die wilt mailen hoef je die niet hier te plaatsen en zal ik eens kijken.
 
Oplossing is gevonden! Met grote dank aan alle leden en in het bijzonder @Edmoor !
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan