• 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.

ik wil een sheet verzenden als pdf mbv sendmail CO, HELPPPPP

  • Onderwerp starter Onderwerp starter Nicu
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Nicu

Gebruiker
Lid geworden
23 jan 2012
Berichten
222
Ik heb een voorbeeldbestandje met een compleet vba script om een sheet als pdf te sturen naar anderen, heb hier hulp mee gekregen, want kwam er zelf niet uit :o
Nu lijkt alles in orde te zijn, en als ik op verzend druk wordt ook alles in gang gezet, maar ik krijg de mail binnen als "ATT00001.bin‎" en dat is geen pdf :(
Kan iemand even checken wat ik fout heb gedaan? Alvast enorm bedankt Voorbeeldbestand als bijlage...

Groet,

Josh
 

Bijlagen

Je bent in de deze regel het rode gedeelte vergeten:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myPath & "\" & f & ".pdf"

Daarnaast kan je achter Filename:= beter de inhoud van de cel gebruiken die je eerder al vulde:
Range("C28").Value
 
Laatst bewerkt:
Ik heb je voorstel geprobeerd, maar ik blijf alleen maar de attachment ATT00001.bin‎ binnen krijgen. Eventueel is het ook wel goed om een excelsheet als bijlage te sturen, maar ik weet nu hoe ik dit moet veranderen?
Kun jij me hier mee helpen....
 
Dit werkt bij mij, zet de pdf in een tijdelijke map en verwijderd deze weer wanneer de mail verzonden is

Code:
Option Explicit

Public Sub CDO_Mail_ActiveSheet_As_PDF()

Dim strBcc As String
Dim strCc As String
Dim strFileName As String
Dim strFileNameFullPath As String
Dim strFrom As String
Dim strSchema As String
Dim strSubject As String
Dim strTextBody As String
Dim strTo As String

    With Application
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    strSchema = "http://schemas.microsoft.com/cdo/configuration/"
    strSubject = "Infuusoverzicht"
    strTo = "to@something.nl"
    strFrom = """Ron"" <ron@something.nl>"
    strCc = ""
    strBcc = ""
    strTextBody = "Hierbij het infuusoverzicht van vandaag"

    strFileName = InputBox(prompt:="Infuusoverzicht", Title:="Name to SAVEAS", Default:="Infuusoverzicht")
    strFileNameFullPath = Environ$("temp") & "\" & strFileName & ".pdf"

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strFileNameFullPath, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=False

    With CreateObject("CDO.Message")
        With .Configuration.Fields
            .Item(strSchema & "sendusing") = 2
            .Item(strSchema & "smtpserver") = "smtpserver"
            .Item(strSchema & "smtpserverport") = 25
            .Item(strSchema & "smtpauthenticate") = 1
            .Item(strSchema & "sendusername") = "sendusername"
            .Item(strSchema & "sendpassword") = "sendpassword"
            .Update
        End With
        .To = strTo
        .CC = ""
        .BCC = ""
        .From = strFrom
        .Subject = strSubject
        .TextBody = strTextBody
        .AddAttachment strFileNameFullPath
        .Send
    End With

    Kill strFileNameFullPath

    With Application
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With

End Sub
 
Super, top!!! Dit werkt perfect.
Als ik nu een andere sheet wil sturen ipv de huidige, kan ik dit dan gewoon kopieeren en plakken (in vba) naar een andere sheet of moet ik nog meer doen?

En is het script in module 1 echt nodig of zou dit ook weg kunnen?:
Sub MakePDFfile()
Dim f As String
Dim pdf As String
f = InputBox(prompt:="Infuusoverzicht", Title:="Name to SAVEAS", Default:="Infuusoverzicht") 'Change 'MyFile' to suit
myPath = ThisWorkbook.Path 'use this if you don't need to see the Path
Cells(28, 3) = myPath & "\" & f & ".pdf" 'This line is needed to pass the complete path and filename to CDO

'Saves Sheet1 as PDF File
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myPath & f & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, From:=1, To:=1, OpenAfterPublish:=False 'this line sets the pages to save, default is sheet 1

'Call Send_Email_Using_CDO 'uncomment this line if you want to run the email code automatically
End Sub
 
Laatst bewerkt:
Maak je code even op met codetags.
 
Je gebruikt ActiveSheet dus elk werkblad dat het actieve werkblad is op het moment dat de macro gestart wordt, wordt verzonden.
Die andere code kan je dan gerust verwijderen want de code van alphamax is volledig.
 
Mooi, dank voor jee reactie. Ik ga het vanavond gelijk proberen.
 
Nu werkt alles prima alleen krijg ik klachten van mijn collega's, is het ook mogelijk om het document niet als pdf bijlage te sturen, maar gewoon de sheet in de body van de mail te laten zien?

Groet,

Josh
 

Bijlagen

Is het niet handiger om het direkt vanuit je spreadsheet als pdf te versturen?
in Libreoffice gaat dat als volgt :
File -> Send -> E-mail as PDF
 
Laatst bewerkt:
Leon61 dat zou inderdaad een leuke oplossing zijn, maar er zit nog veel meer in dit formulier wat ik nu weggehaald heb. Het mooie is dat je automatisch met een druk op de knop de mail kan verzenden zonder outlook te gebruiken. Zo kunnen mijn collega's die niks van excel snappen toch mooi een pdf-je verzenden.


Alphamax ik heb gekeken naar wat je schreef, maar dit script van Ron is alleen bedoeld voor mailen m.b.v. outlook. Voor het script wat ik gebruik hoeft geen outlook gebruikt te worden. Is er geen mogelijkheid om het pdf gedeelte in mijn script te verwijderen en dan te vervangen door de code die jij schreef?
 
CDO heeft ook een .htmlbody net zoals outlook.
De code werkt, zonet zelf getest met CDO.
 
Laatst bewerkt:
Ik heb het bij mij geprobeerd, maar krijg telkens een fout melding. Is het mogelijk dat je kan laten zien waar je het precies in het script het gezet hebt en wat je weggelaten hebt m.b.t. de pdf?
 
Lijkt het je niet handig om, als je zegt een foutmelding te krijgen, deze dan ook hier te vermelden?
 
Goed idee ;-)

Ik krijg een compileerfout: sub of function is niet gedefinieerd

Het "RangetoHtml" is dan blauw geslecteerd
 
Dat is simpel op te lossen als je even laat zien wat je hebt gedaan. Er staan kennelijk dingen niet op de juiste plek of niet juist benoemd.

Edit:
Ik heb even naar de code van Ron gekeken. Heb je dit wel gedaan?
Don't forget to copy the function RangetoHTML in the same module
 
Laatst bewerkt:
Ik heb alles nagekeken. De versie van Ron werkte prima in een test .xls en daarna hem gekopierd naar mijn bestand en wat aanpassingen gedaan, maar nu werkt die nog niet. Ik heb uiteindelijk alles stap voor stap opnieuw gemaakt en in mijn test document doet hij het goed, maar daarna opnieuw gekopierd en ook de lay-out gekopieerd vanuit het test document, maar blijf de foutmelding krijgen: compileerfout: sub of function is niet gedefinieerd Wat zie ik nu over het hoofd? En klopt het dat als je de sheet beveiligd, dat dan het verzenden ook niet meer lukt?

Option Explicit


Sub CDO_Send_Selection_Or_Range_Body()


Dim rng As Range
Dim iMsg As Object
Dim iConf As Object
Dim Flds As Variant

Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")

iConf.Load -1 ' CDO Source Defaults
Set Flds = iConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "gfdgdfg.nl"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Update
End With


Set rng = Nothing
On Error Resume Next

Set rng = Sheets("Overuren").Range("A1:M20").SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If rng Is Nothing Then
MsgBox "The selection is not a range or the sheet is protected" & _
vbNewLine & "please correct and try again.", vbOKOnly
Exit Sub
End If

With Application
.EnableEvents = False
.ScreenUpdating = False
End With

With iMsg
Set .Configuration = iConf
.To = "hgfdh@gfhft.nl"
.CC = Range("C6").Value
.BCC = ""
.From = Range("C6").Value
.Subject = " Graag wil ik jullie informeren m.b.t overuren-neo maken/opnemen"""
.HTMLBody = RangetoHTML
.Send
End With

MsgBox "De overuren zijn verstuurd naar het roosterburo"

With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Range("C4:F4").Select
Selection.ClearContents
Range("C6:F6").Select
Selection.ClearContents
Range("C8").Select
Selection.ClearContents
Range("C10").Select
Selection.ClearContents
Range("F10:G10").Select
Selection.ClearContents
Range("C12:L12").Select
Selection.ClearContents
Range("C13:L13").Select
Selection.ClearContents
Range("F8").Select
Selection.ClearContents
Range("C14:L14").Select
Selection.ClearContents
Range("C16").Select
Selection.ClearContents
Range("C4:F4").Select
End Sub
 
Laatst bewerkt:
Zie het laatste stukje in m'n vorige post. De functie RangetoHTML heb je er niet in zitten.
 
Ik denk dat dit ook zo werkt i.p.v. de lange lijst.
Code:
Range("C4:F4,C6:F6,C8,C10,F10:G10,C12:L12,C13:L13,F8,C14:L14,C16").ClearContents
Range("C4:F4").Select
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan