Attachment wordt niet meegestuurd in de mail

Status
Niet open voor verdere reacties.

AMBERTJE

Gebruiker
Lid geworden
27 aug 2009
Berichten
121
Hallo iedereen,

Allereerst wil ik me verontschuldigen dat er weer een post verschijnt over het automatisch mailen, ik heb alle materiaal van Ron De Bruin gelezen maar het lukt me nog niet.

Het gaat over een Excell bestand dat nooit gesaved wordt, er is een werkboek aangemaakt (bijv."Book1") en die wil ik automatisch als attachment versturen.

De code werkt perfect maar de Attach verschijnt niet.
Misschien ligt het weer aan het declareren v.d.Excel variabelen omdat deze code in een andere applicatie dan Excel is geschreven.

2de probleem: ik wil dit naar meerdere mensen sturen en ik dacht de adressen te scheiden met een , of een ; maar dit werkt niet.

Weten jullie hoe ik dit probleem kan oplossen aub?
Ik ga proberen de code mee te posten maar dit zou wel eens een probleem kunnen zijn en dan stuur ik ze vanavond van thuisuit op.

Code:
Sub Mail_Attachement()
Dim OutApp As Object, OutMail As Object

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

    With ActiveWorkbook 'ThisWorkbook 'xlBook
    On Error Resume Next
        With OutMail
            .To = "Jan.Janssens@janneman.com"
            .CC = ""
            .BCC = ""
            .Subject = "Report"
            .Body = ""
            .Attachements.Add
            .Display
            .Send
        End With
        On Error GoTo 0
        .Close SaveChanges:=False
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing

End Sub

Met vriendelijke groetjes,
Amber
 
@ Emil: Amber heeft Ron de Bruin al doorgespit :)
Maar Emil heeft wel gelijk: je kunt geen bestand versturen dat niet bestaat.... Dus daarom zou je het bestand eerst tijdelijk moeten opslaan, dan mailen en vervolgens het bestand verwijderen. Ron doet dat ongeveer zo:

Code:
    '--------------------------------------------------------------------------------------------------
    ' Tijdelijk bestand opslaan...
    '--------------------------------------------------------------------------------------------------
    TempFilePath = Environ$("temp") & "\" 'Save the new workbook/Mail it/Delete it
    TempFileName = "Nieuwe medewerker - " & Range("Medewerker_Naam")  'Nieuwe mapnaam
 
    '--------------------------------------------------------------------------------------------------
    ' Mail maken voor Outlook...
    '--------------------------------------------------------------------------------------------------
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    OutApp.Visible = True
    Set OutMail = OutApp.CreateItem(0)

    '--------------------------------------------------------------------------------------------------
    ' Instellen van het Cellenbereik ...
    '--------------------------------------------------------------------------------------------------
    Set rng = Range("A1:J50").SpecialCells(xlCellTypeVisible) 'Selecteer de zichtbare regels
    
    With DestWB
        Application.DisplayAlerts = False
        .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
        Application.DisplayAlerts = True
        On Error Resume Next
        With OutMail
            .To = "email.plaats.nl"
            .Subject = "Aanvraag voor Nieuwe medewerker - " & Sheets(sNieuwBlad).Range("Medewerker_Naam")
            '------------------------------------------------------------------------------------------------
            .HTMLBody = RangetoHTML(rng)
            '------------------------------------------------------------------------------------------------
            ' Als er geen bijlage wordt verstuurd, dan de volgende regel verwijderen...
            '------------------------------------------------------------------------------------------------
            .Attachments.Add DestWB.FullName
            .Display 'of .Send gebruiken, als je gelijk wilt verzenden.
''            .Send
        End With
        On Error GoTo 0
        .Close SaveChanges:=False
	End With

    '------------------------------------------------------------------------------------------------
    ' Bestanden opruimen, en variabele leegmaken...
    '------------------------------------------------------------------------------------------------
    Kill TempFilePath & TempFileName & FileExtStr
    Set OutMail = Nothing
    Set OutApp = Nothing
 
@Emil :
Een Array geeft bij mij een foutmelding, als je via Outlook.MailItem werkt. ik heb office 2007

Ik verwacht geen syntax problemen bij het toevoegen van adressen bij Outlook.Mailitem.To gescheiden door een ;
(bijvoorbeeld Mailitem.to "jan@jan1.com; jan@jan2.com")

Nu moet ik wel zeggen dat ik altijd automatische mails alleen op display zet, en ze daarna pas verstuur. ik weet niet of direct verzenden daar van invloed op is

Je eventueel wel proberen recipients.add te gebruiken via de outlook manier.

hier een syntax voorbeeld:
(de constanten komen uit outlook, en het wordtminder makkelijk beheersbaar als je je constanten niet benoemt)
Code:
Option Explicit

Const olMailItem As Long = 0

Private Enum OlMailRecipientType
    olTo = 1
    olCC = 2
    olBCC = 3
End Enum

Sub Send_A_Mail()
Dim Outlook As Object
Dim Mail As Object

    Set Outlook = CreateObject("outlook.Application")
    Set Mail = Outlook.CreateItem(olMailItem)
    
    With Mail
        .Recipients.Add("Jan1@jan.com").Type = olTo
        .Recipients.Add("Jan2@jan.com").Type = olTo
        .Recipients.Add("Jan3@jan.com").Type = olCC
        .Recipients.Add("Jan4@jan.com").Type = olBCC
        .Subject = "Moar jan plz!"
        .Display
    End With
    
    Set Outlook = Nothing
    Set Mail = Nothing
    
End Sub
 
Laatst bewerkt:
Hoi Octafish en emil,

Sinds vanmorgen ben ik aan het proberen maar het lukt me niet.
Runtime error 91 object variabele of with object variabel not defined blijft me achtervolgen.

Ik zie echt niet wat ik verkeerd doe :confused:

De code die ik heb herwerkt zal ik vanavond moeten doorsturen want ik kan vandaag nogmaals niet meer posten vanop het werk.

Amber
 
Hoi Octafish en emil,

Sinds vanmorgen ben ik aan het proberen maar het lukt me niet.
Runtime error 91 object variabele of with object variabel not defined blijft me achtervolgen.

Ik zie echt niet wat ik verkeerd doe :confused:

De code die ik heb herwerkt zal ik vanavond moeten doorsturen want ik kan vandaag nogmaals niet meer posten vanop het werk.

Amber

Nu de code:
Code:
Sub Mail_Workbook()

Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Dim TempFilePath As String, TempFileName As String, FileExtStr As String, rng As Range

TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & xlBook.Name & " " _
                & Format(Now, "dd-mm-yyyy hh-mm-ss")


Set rng = Range("A1:J50").SpecialCells(xlCellTypeVisible)

    With xlBook
    Application.DisplayAlerts = False
    .SaveAs TempFilePath & TempFileName & FileExtStr
    On Error Resume Next
        With OutMail
            .To = "Jan.Janssens@janneman.be"
            .CC = ""
            .BCC = ""
            .Subject = "Bomb Recap Report"
            .Body = ""
            '.Attachements("E:\APPLICATIONS\BOMB RECAP REPORT\Book1.txt").Add
            .Attachements.Add xlBook.FullName
            .Display
            .Send
        End With
        On Error GoTo 0
        .Close SaveChanges:=False
    End With

    Kill TempFilePath & TempFileName & FileExtStr
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
 
Laatst bewerkt:
Hoi Ambertje

er is nogal een berg fout aan die code.
het object Range is een Excel.Range object
In de context van jouw macro zou je moeten refereren naar xlSheet.Range

Op dezelfde regel verwijs je naar een constante van Excel's XlCellType enumeration, namelijk xlCellTypeVisible. (waarde = 12)
Deze constante zou je moeten benoemen en toewijzen, anders treedte er een fout op.

Application.displayalerts zou moeten zijn xlApp.Displayalerts

On error resume next moet je verwijderen, zodat je ziet waar de fout optreedt, in plaats van dat je denkt te weten waar de fout optreedt.

Attachments schrijf je met één e.

Environ wordt niet ondersteund in vbscript, maar alleen in Office producten. (Ik weet niet waarvandaan je overigens probeert deze macro uit tevoeren, maar ik dacht ik vermeld het even)

en wellicht zijn er nog meerzaken die ik over het hoofd heb gezien.

Misschien moet je eens gaan denken aan een oplossing waar je zelf ook mee uit de voeten kan, en die je zelf kunt onderhouden. Misschien is het iets te hoog gegrepen om meteen op deze manier te beginnen met Office VBA. Je komt er vanzelf wel, maar als je er niets van snapt, dan leer je ook helemaal niets.

En, je hebt per ongeluk een email adres in de code laten staan, verander die even, dat lijkt me beter :)
 
Laatst bewerkt:
Mark,

Ik weet inderdaad niet zo veel af van VBA maar ik heb getracht naar een voorbeeld te werken dat werd aangeboden door Ron wat niet zo simpel is als het lijkt (misschien voor gevorderden).
Ik ben altijd bereid om bij te leren omdat dit me heel erg interesseert.

Ik heb deze code niet in Office VBA staan, het wordt gegenereerd vanuit een emulator die een scripting taal heeft.

Dit gezegd ben ik terug naar de basics gegaan en het versimpeld maar er zit nog (hopelijk) 1 obstakel in de weg:
Als ik debug en aan Attachments.Add xlBook.Path kom krijg ik een runtime error 'Path does not exist.' Verschillende keren ben ik gaan chekken of het Path dat ik doorgeef wel degelijk juist is dus dat is niet de oorzaak.

Kun jij me zeggen wat ik nu weeral verkeerd doe?

Code:
Sub Mail_Workbook()

Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Dim strBestand As String
strBestand = ("E:\APPLICATIONS\BOMB RECAP REPORT\Book1.xls") 
Dim Path As Variant 
Path = strBestand

    With xlBook
    xlApp.DisplayAlerts = False
        With OutMail
            .To = "Jan.Janssens@Janneman.be"
            .CC = ""
            .BCC = ""
            .Subject = "Bomb Recap Report"
            .Body = ""
            .Attachments.Add xlBook.Path
            .Display
            .Send
        End With
        On Error GoTo 0
        .Close SaveChanges:=False
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Groetjes,
Amber
 
hier een poging:
deze macro starten in de macro "Public Sub leesrapport()" want het object xlbook moet worden doorgegeven.
op dezelfde manier als de macro DeleteEmptyRows(xlsheet)

Sub Mail_Workbook(xlbook)
'variabelen
Dim OutApp As Object
Dim OutMail As Object
Dim strBestand As String

'variabelen vullen
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strBestand = "E:\APPLICATIONS\BOMB RECAP REPORT\Book1.xls"
' xlApp.DisplayAlerts = False

With xlbook
'al eerder opgemerkt: excelbestand opslaan
.SaveAs strBestand

With OutMail
.To = "Jan.Janssens@Janneman.be"
.CC = ""
.BCC = ""
.Subject = "Bomb Recap Report"
.Body = ""
.Attachments.Add xlbook.FullName
.Display
.Send
End With
On Error GoTo 0
.Close SaveChanges:=False
End With
'bestand wissen
Kill strBestand 'van deze code ben ik niet zeker

Set OutMail = Nothing
Set OutApp = Nothing
End Sub
 
In je code zou je geen xlbook eigenschap moeten gebruiken, maar gewoon je bestand:
.Attachments.Add strBestand dus.
 
Hi Ambertje,

Hier een meter code.
Kijk maar eens of dit werkt

Dit zou je in ieder geval zicht moeten geven op wat er nu nog eventueel fout gaat.
Ik heb verschillende Bewerkingen naar aparte procedures getrokken voor een beter overzicht wat er nu precies fout gaat.
Eigenlijk is dit meer hoe ikzelf dit project zou programmeren.

Ik hoop dat je het op deze manier ook kunt doorgronden.

Succes,
Mark

Code:
Sub Mail_Workbook()
'is dit bestand tijdelijk of niet?
Const strcTEMP_WORKBOOK As String = "E:\APPLICATIONS\BOMB RECAP REPORT\Book1.xls"

Dim MyPath As String

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)
    
    'het bestand opslaan
    SaveExcelWorkbook Workbook:=xlBook, _
                      FileName:=strcTEMP_WORKBOOK
    
    'bestaat het bestand?
    
    On Error Resume Next
    'Geeft fout als drive ontbreekt, of lege string als map ontbreekt
    MyPath = Dir(strcTEMP_WORKBOOK)
    On Error GoTo 0
    
    If MyPath <> vbNullString Then
    
        MailWorkbook strcTEMP_WORKBOOK
        On Error Resume Next
        Kill strcTEMP_WORKBOOK
        On Error GoTo 0
    
    Else
    
        MsgBox "Het Bestand " & strcTEMP_WORKBOOK & " is niet gevonden", _
                vbExclamation, "Bestand of Pad ontbreekt"
    
    End If
    
    Set xlApp = Nothing
    Set xlBook = Nothing
    Set xlSheet = Nothing
    
End Sub

Private Sub SaveExcelWorkbook(ByVal Workbook As Object, _
                              ByVal FileName As String)
'Save a copy of an Excel Workbook as parameter "Filename"
Const xlExcel8 As Long = 56
Dim Excel As Object

    On Error GoTo SaveFileErr:
    
    If TypeName(Workbook) <> "Workbook" Then
        Err.Raise Number:=vbObjectError + 3001, _
                  Source:="SaveExcelWorkbook", _
                  Description:="Verwacht een object van het type Workbook"
    End If
    
    If TypeName(Workbook.Parent) = "Application" Then
        Set Excel = Workbook.Parent
    Else
        Err.Raise Number:=vbObjectError + 3002, _
                  Source:="SaveExcelWorkbook", _
                  Description:="Kan Geen Applicatie Bepalen"
    End If
    
    Excel.DisplayAlerts = False

    With Workbook
        
        .SaveAs FileName:=FileName, _
                FileFormat:=xlExcel8
        .Close SaveChanges:=False
    
    End With
    
    Excel.DisplayAlerts = False
    
    On Error GoTo 0
    
SaveFileErr:
    
    If Err.Number <> 0 Then
        MsgBox "Er is een fout opgetreden:" & vbCrLf & vbCrLf & _
                "Procedure: " & vbTab & Err.Source & vbCrLf & _
                "FoutMelding:" & vbTab & Err.Description, _
                vbExclamation, "Fout"
    End If
    
    If TypeName(Excel) = "Application" Then
        Excel.DisplayAlerts = False
    End If
    
    Set Excel = Nothing

End Sub

Private Sub MailWorkbook(ByVal FileName As String, _
                         Optional ByVal SendDirect As Boolean = False)
Const olMailItem As Long = 0
Dim olMail As Object
Dim olApp As Object

    Set olApp = CreateObject("Outlook.Application")
    Set olMail = olApp.CreateItem(olMailItem)

    On Error GoTo MailError:

    With olMail
    
        .To = "Jan.Janssens@Janneman.be"
        .Subject = "Bomb Recap Report"
        .Attachments.Add FileName
        
        If SendDirect Then
            .Send
        Else
            .Display
        End If
        
    End With

    On Error GoTo 0
    
MailError:

    If Err.Number <> 0 Then
        
        Dim myaction As VbMsgBoxResult
        
        myaction = MsgBox("Er is een fout opgetreden:" & vbCrLf & vbCrLf & _
                            "Procedure: " & vbTab & "Mailworkbook" & vbCrLf & _
                            "FoutMelding:" & vbTab & Err.Description, _
                            vbAbortRetryIgnore + vbExclamation, "Fout")
        'kan netter:
        If myaction = vbIgnore Then Resume Next
        If myaction = vbRetry Then Resume
        'vbAbort
        Err.Clear

    End If

    Set olApp = Nothing
    Set olMail = Nothing

End Sub
 
Laatst bewerkt:
@Mark:

Uw code is voor een deel duidelijk voor mij en ik ben blij dat je mij hierbij helpt maar dit gaat toch boven mijn petje als je kijkt naar mijn bescheiden code :o

Op uw ? in de code of het een tijdelijk bestand was:
Het bestand wordt elke keer opnieuw aangemaakt en telkens gesaved als "Book1".

Het werkt echter perfect op een klein detailke na:

Telkens ik de code laat lopen komt er toch een Error boodschap bij de Sub SaveExcelWorkbook: verwacht een object van het type workbook.
Ook komt er een 2de workbook tevoorschijn die leeg is.

Natuurlijk snap ik niet alles wat er staat en sommige waardes van variabelen bekijk ik in het immediate window om te zien waar ze voor staan.


@Emil:
Ik heb de aanpassingen die je aan mijn code hebt aangebracht in de pratijk getest en hoera ik krijg de attachement "Book1" in de mail.

Dus dit lukt perfect, dank u wel :thumb:


@Octafish:
Michel je had gelijk, met Add.strBestand lukt het ook ;)

Dank aan allen die me hierbij geholpen hebben, het zal niet de laatste keer zijn dat ik jullie hulp zal inroepen want ik blijf toch behoorlijk sukkelen met VBA :o

Groetjes,
Ambertje
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan