Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Excel2007] .Attachments.Add werkt niet (macro met e-mail)

Pagina: 1
Acties:

  • PaulBloem
  • Registratie: Februari 2003
  • Laatst online: 17:12
Goedemorgen allen,

Situatie
De bedoeling is om met een macro in Excel een bijlage te sturen via de e-mail.

Foutmelding
De volgende foutmelding ontvang ik:
"Run-Time error '-2147024894 (8007002)
Cannot find this file. Verify the path and file name are correct"

Dit vind ik erg raar aangezien er naar een temporary locatie wordt verwezen.
Als ik met de muis in de code in Excel over File Name ga dan geeft hij ook de juiste file aan:
Afbeeldingslocatie: http://img62.imageshack.us/img62/5862/errorngd.jpg

Na gister de gehele dag gehannes te hebben hoop ik op een goede eye-opener.

De code
code: filename
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sub Worksheet_to_Email2()
    
    Dim oApp, oMail As Object, _
    FileName, FilePath As String

    Application.ScreenUpdating = False
    
    Mailid = Range("D49")

    Body = Range("D52")

    FileName = Create_PDF(ActiveSheet, "Sheet.pdf", True, False)
    FilePath = Environ ("TEMP")
    
    On Error Resume Next
    Kill FilePath & "\" & FileName
    On Error GoTo 0

    Set oApp = CreateObject("Outlook.Application")
    Set oMail = oApp.CreateItem(0)
    With oMail
        .To = Mailid
        .Subject = Range("D50")
        .Body = Body
        .Attachments.Add FileName
        .display
    End With
  
    Kill FileName
    Application.ScreenUpdating = True
    Set oMail = Nothing
    Set oApp = Nothing
    
End Sub


Bij voorbaat al dank voor het meedenken.

Verwijderd

Volgens mij moet je toch echt de volledige bestandsnaam (dus inclusief pad) opgeven. Op je screenshot zie ik alleen de bestandsnaam zelf, en niet de (tijdelijke) locatie waar het bestand staat.

(staat trouwens ook in de omschrijving van de foutmelding)

[ Voor 13% gewijzigd door Verwijderd op 21-07-2011 09:24 ]


  • PaulBloem
  • Registratie: Februari 2003
  • Laatst online: 17:12
Verwijderd schreef op donderdag 21 juli 2011 @ 09:23:
Volgens mij moet je toch echt de volledige bestandsnaam (dus inclusief pad) opgeven. Op je screenshot zie ik alleen de bestandsnaam zelf, en niet de (tijdelijke) locatie waar het bestand staat.

(staat trouwens ook in de omschrijving van de foutmelding)
Zou je mij een voorbeeld kunnen geven hoe het zou werken naar jou idee?
Eigenlijk zou ik wel willen werken met een temp locatie en geen absolute filepath. Aangezien deze op diverse PC's moet werken.

Verwijderd

Een bestand dat je wilt toevoegen, moet toch ergens opgeslagen zijn. Ik weet in ieder geval niet hoe het anders zou moeten, maar anders zou je de helpfile van de Attachments.Add-methode van het Outlook-object er eens op kunnen naslaan.

Als je vantevoren niet weet waar je zo'n bestand kunt opslaan, zou je altijd kunnen kijken of je het bestand in dezelfde map kunt opslaan als het Excelbestand waarin je deze macro hebt zitten. Het pad van die map kun je met ThisWorkbook.Path ophalen.

  • PaulBloem
  • Registratie: Februari 2003
  • Laatst online: 17:12
Verwijderd schreef op donderdag 21 juli 2011 @ 10:11:
Als je vantevoren niet weet waar je zo'n bestand kunt opslaan, zou je altijd kunnen kijken of je het bestand in dezelfde map kunt opslaan als het Excelbestand waarin je deze macro hebt zitten. Het pad van die map kun je met ThisWorkbook.Path ophalen.
Helpfile werd me niet veel duidelijker helaas.
Hoe zou je de code dan neerzetten in VB?

code:
1
2
3
4
5
    FilePath = ThisWorkbook.Path

....

        .Attachments.Add ThisWorkbook.Path.FileName '<- ???

Verwijderd

Het antwoord op die vraag staat nota bene al in je code op regel 16 in je eerste post... ;)

Is dit code die je zelf hebt geschreven?

[ Voor 13% gewijzigd door Verwijderd op 21-07-2011 11:00 ]


  • PaulBloem
  • Registratie: Februari 2003
  • Laatst online: 17:12
duh.. inderdaad ja..
Nee dit is zeker niet mijn eigen code.. hoop knip en plakwerk wat ik via forums bij elkaar kreeg.
Door trial en error kom ik wel steeds een stukje verder.

Maarrrr... hij doet het!
Hoe? Geen idee.. (ja klinkt niet helemaal snugger)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub Worksheet_to_Email2()
    
    Dim oApp, oMail As Object
    Dim FName As String
    Dim FilePath As String

    Application.ScreenUpdating = False
    
    Mailid = Range("D49")

    Body = Range("D52")

    FName = Create_PDF(ActiveSheet, "Sheet.pdf", True, False)
    FilePath = ThisWorkbook.Path

    On Error Resume Next
    Kill FilePath & "\" & FName
    On Error GoTo 0
    
    Set oApp = CreateObject("Outlook.Application")
    Set oMail = oApp.CreateItem(0)
    With oMail
        .To = Mailid
        .Subject = Range("D50")
        .Body = Body
        .Attachments.Add FName
        .display
    End With
  
    Kill FName
    Application.ScreenUpdating = True
    Set oMail = Nothing
    Set oApp = Nothing
    
End Sub


Het wijzigen van FileName naar FName zou het verschil in principe niet moeten maken..

Alargule
In ieder geval erg bedankt voor het meedenken!

  • PaulBloem
  • Registratie: Februari 2003
  • Laatst online: 17:12
oke.. nu begrijp ik er helemaal niets meer van.
Nu doet hij het niet meer.

Er is niets maar dan ook niets verandert.
Ik heb de file naar een collega gestuurd en daar deed hij het ook. Kreeg hem terug.
Toen deed hij het ook. Even later nog een keer proberen en toen ging het weer niet.

Toen weer de foutmelding dat hij de file niet kon vinden:
"Run-Time error '-2147024894 (8007002)
Cannot find this file. Verify the path and file name are correct"

Ik begrijp er niets van, hoe kan iets nu het ene moment wel doen en het andere moment niet.
De code was totaal ongewijzigd gebleven. 8)7

Verwijderd

Ik ben eerlijk gezegd wel eens benieuwd naar wat die Create_PDF-functie doet?

Zo te zien zou die een string moeten teruggeven met de bestandsnaam.

Je zou eens met
code:
1
Debug.Print FName
of een watch op de variabele FName in debug-modus kunnen kijken naar wat de waarde is van FName, en dan eens kijken wat die waarde is als het goed gaat, en wat die waarde is als het fout gaat.

Zoals ik je code nu zie, is FName nog steeds gewoon een bestandsnaam zonder pad (en dus niet volledig).

  • PaulBloem
  • Registratie: Februari 2003
  • Laatst online: 17:12
Verwijderd schreef op donderdag 21 juli 2011 @ 11:44:
Ik ben eerlijk gezegd wel eens benieuwd naar wat die Create_PDF-functie doet?

Zo te zien zou die een string moeten teruggeven met de bestandsnaam.

Je zou eens met
code:
1
Debug.Print FName
of een watch op de variabele FName in debug-modus kunnen kijken naar wat de waarde is van FName, en dan eens kijken wat die waarde is als het goed gaat, en wat die waarde is als het fout gaat.

Zoals ik je code nu zie, is FName nog steeds gewoon een bestandsnaam zonder pad (en dus niet volledig).
Onderstaand de code van de Create_PDF:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Function Create_PDF(Myvar As Object, FixedFilePathName As String, _
                        OverwriteIfFileExist As Boolean, OpenPDFAfterPublish As Boolean) As String
    Dim FileFormatstr As String
    Dim FName As Variant

    If Dir(Environ("commonprogramfiles") & "\Microsoft Shared\OFFICE" _
         & Format(Val(Application.Version), "00") & "\EXP_PDF.DLL") <> "" Then

        If FixedFilePathName = "" Then
            FileFormatstr = "PDF Files (*.pdf), *.pdf"
            FName = Application.GetSaveAsFilename("", filefilter:=FileFormatstr, _
                                                  Title:="Create PDF")

            If FName = False Then Exit Function
        Else
            FName = FixedFilePathName
        End If

        If OverwriteIfFileExist = False Then
            If Dir(FName) <> "" Then Exit Function
        End If

        On Error Resume Next
        Myvar.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                FileName:=FName, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=OpenPDFAfterPublish
        On Error GoTo 0

        If Dir(FName) <> "" Then Create_PDF = FName
    End If
End Function


Top voor het inkijken van deze code. Deze vond ik inderdaad een stuk ingewikkelder.
Deze heb ik genomen van de Excel website van Rond de Bruin.

  • PaulBloem
  • Registratie: Februari 2003
  • Laatst online: 17:12
Hi, het is nu opgelost.
Iemand heeft me geholpen met een nieuw stuk code, namelijk:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub Worksheet_to_Email2()

    Mailid = Range("D49")

    Body = Range("D52")

FilePath = Environ("TEMP")
FileName = "sheet"
stAttachment = FilePath & "\" & FileName & ".pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=stAttachment, _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
                
    Set oApp = CreateObject("Outlook.Application")
    Set oMail = oApp.CreateItem(0)
    With oMail
        .To = Mailid
        .Subject = Range("D50")
        .Body = Body
        .Attachments.Add stAttachment
        .display
    End With
  
    Kill stAttachment
    Application.ScreenUpdating = True
    Set oMail = Nothing
    Set oApp = Nothing
    
End Sub


Nogmaals bedankt voor je input in ieder geval!
Pagina: 1