Bijlage meesturen via Excel VBA

Status
Niet open voor verdere reacties.
Aha. Ik had de spatie weggehaald maar weer verder gegaan in mijn oude lijst.

Nu werkt het!

Ik zal dit testen met andere rapporten.

Alvast bedankt en fijne paasdagen.

Groeten,

Roy.
 
Hoi Edmoor,

Het is gelukt! Nog bedankt voor je hulp.

Groeten,

Roy.
 
Hetzelfde gewenst :)
 
Hoi Edmoor,

Ik had nog een vraag. Ik wil de code iets aangepast hebben.

Code:
Dim Bestand As String
 
    Bestand = ActiveWorkbook.Path & "\4 Opgeleverd aan OG\Concept\" & McName & "_concept.pdf"

    olMail.HTMLBody = strbody & "<br/>" & Signature
    
    If Dir(Bestand) <> vbNullString Then
    olMail.Attachments.Add Bestand
    Else
                MsgBox ("Kan het bestand " & Bestand & " niet vinden!")
    End If
    olMail.Display
    
 
    If Not olApp Is Nothing Then Set olApp = Nothing
End Sub


Ik wil een IF-Else functie creëren waarbij hij als eerste moet zoeken in: Bestand = ActiveWorkbook.Path & "\4 Opgeleverd aan OG\Concept" & McName & "_concept.pdf"

indien hij hier het bestand niet vindt, dan moet hij zoeken in: Bestand = ActiveWorkbook.Path & "\4 Opgeleverd aan OG\Concept\ & McName & \ & "_concept.pdf" (dus een subdirectory lager).

En als het bestand niet bestaat, dan een melding geven dat het niet bestaat.

Groeten,

Roy
 
Dat zal dan zoiets worden:
Code:
    Dim Bestand As String
    Dim Bestand1 As String
    Dim Bestand2 As String

    Bestand1 = ActiveWorkbook.Path & "\4 Opgeleverd aan OG\Concept\" & mcname & "_concept.pdf"
    Bestand2 = ActiveWorkbook.Path & "\4 Opgeleverd aan OG\Concept\" & mcname & "\" & mcname & "_concept.pdf"
    
    If Dir(Bestand1) = vbNullString Then
        If Dir(Bestand2) = vbNullString Then
            MsgBox ("Kan het bestand niet vinden!")
        Else
            Bestand = Bestand2
        End If
    Else
        Bestand = Bestand1
    End If
                
    olMail.HTMLBody = strbody & "<br/>" & Signature
    olMail.Attachments.Add Bestand
    olMail.Display
 
Hoi Edmoor,

Dit werkt prima. Heb ietsje aangepast.

Heb nog een vraagje. Mijn Excel bestand staat nu onder D:\test\608-1500870A01\xxxx.xlsm.

Indien het onder map D:\test\608-1500870A01\3 Werkdossier\definitief\xxxx.xlsm staat dan werkt de code niet meer. Dit is logisch, omdat onder map "\3 Werkdossier\definitief" geen mapje "\4 Opgeleverd aan OG" bestaat.

Hoe zorg ik ervoor dat de code v.a. directory 608-1500870A01 gaat zoeken? (1500870A01 is variabel).
Bestand1 = wb.Path & "\4 Opgeleverd aan OG\Concept" & McName & "_concept.pdf"
Bestand2 = wb.Path & "\4 Opgeleverd aan OG\Concept" & McName & "" & McName & "_concept.pdf"

Code:
    Dim part() As String
    Dim r As Integer
    Dim basePath As String
    Dim wb As Excel.Workbook
    
    part = Split(wb.Path, "\")
    i = 0
    For r = 0 To UBound(part)
        basePath = basePath & part(r) & "\"
        If Left(part(r), 3) = "608" Then Exit For
    Next
    
    Dim Bestand As String
    Dim Bestand1 As String
    Dim Bestand2 As String
    
    Bestand1 = wb.Path & "\4 Opgeleverd aan OG\Concept\" & McName & "_concept.pdf"
    Bestand2 = wb.Path & "\4 Opgeleverd aan OG\Concept\" & McName & "\" & McName & "_concept.pdf"
        
       If Dir(Bestand1) = vbNullString Then
        If Dir(Bestand2) = vbNullString Then
            MsgBox "Kan het bestand " & McName & "_concept.pdf" & " niet vinden in:" & vbCrLf & vbCrLf & Bestand1 & vbCrLf & "of" & vbCrLf & Bestand2 & vbCrLf & vbCrLf & "Controleer of het bestandsnaam correct is en/of in het map concept staat!", vbOKOnly
            Exit Sub
        Else
            Bestand = Bestand2
        End If
    Else
        Bestand = Bestand1
    End If
    
    olMail.HTMLBody = strbody & "<br/>" & Signature
    olMail.Attachments.Add Bestand
    olMail.Display
End Sub

De code werkt wel zonder foutmelding, echter voegt hij geen bijlage toe. Ik denk dat er iets verkeerd staat in de code.

Groeten,

Roy.
 
Het zou nu toch duidelijk moeten zijn hoe je een variabele in een string opneemt, want daar gaat het om. Vergeet daarbij niet om er een "" aan toe te voegen als het gaat om de naam van een map.
 
Heb je een tip? Helaas lukt het mij niet. Ben helaas een beginner :(
 
Gebruik eens die zelfde code maar dan met de rode toevoeging:
Code:
    Dim part() As String
    Dim r As Integer
    Dim basePath As String
    Dim wb As Excel.Workbook
    
    part = Split(wb.Path, "\")
    i = 0
    For r = 0 To UBound(part)
        basePath = basePath & part(r) & "\"
        If Left(part(r), 3) = "608" Then Exit For
    Next
    
    Dim Bestand As String
    Dim Bestand1 As String
    Dim Bestand2 As String
    
    Bestand1 = wb.Path & "\4 Opgeleverd aan OG\Concept\" & McName & "_concept.pdf"
    Bestand2 = wb.Path & "\4 Opgeleverd aan OG\Concept\" & McName & "\" & McName & "_concept.pdf"
        
    If Dir(Bestand1) = vbNullString Then
        If Dir(Bestand2) = vbNullString Then
            MsgBox "Kan het bestand " & McName & "_concept.pdf" & " niet vinden in:" & vbCrLf & vbCrLf & Bestand1 & vbCrLf & "of" & vbCrLf & Bestand2 & vbCrLf & vbCrLf & "Controleer of het bestandsnaam correct is en/of in het map concept staat!", vbOKOnly
            Exit Sub
        Else
            Bestand = Bestand2
        End If
    Else
        Bestand = Bestand1
    End If
    
    [COLOR="#FF0000"]MsgBox Bestand[/COLOR]
    olMail.HTMLBody = strbody & "<br/>" & Signature
    olMail.Attachments.Add Bestand
    olMail.Display
End Sub
Laat dan weten wat er in de message box staat.
 
Dan is het pad naar het bestand niet goed.
 
Indien ik bij Bestand1 & Bestand2 "wb.path" verander naar "ActiveWorkbook.Path" dan pakt ie wel.

Maar dit gaat goed, indien het Excel bestand in de hoofddirectory staat.
Indien het onder map D:\test\608-1500870A01\3 Werkdossier\definitief\xxxx.xlsm staat dan werkt de code niet meer. Dit is logisch, omdat onder map "\3 Werkdossier\definitief" geen mapje "\4 Opgeleverd aan OG" bestaat.
 
Dat wb.Path kan ook niet werken want de variabele wb wordt niet van een waarde voorzien. Wat is de waarde van ActiveWorkbook.Path? Dus, in welke map staat het document?
 
Excel staat nu onder:
?ActiveWorkbook.Path
D:\test\608-1500870A01\3 Werkdossier\Final

Bestand1:
?ActiveWorkbook.Path & "\4 Opgeleverd aan OG\Concept" & McName & "_concept.pdf
D:\test\608-1500870A01\3 Werkdossier\Final\4 Opgeleverd aan OG\Concept\Test_concept.pdf
(Moet "D:\test\608-1500870A01\4 Opgeleverd aan OG\Concept\Test_concept.pdf" zijn).

Bestand2:
?ActiveWorkbook.Path & "\4 Opgeleverd aan OG\Concept" & McName & "" & McName & "_concept.pdf
D:\test\608-1500870A01\3 Werkdossier\Final\4 Opgeleverd aan OG\Concept\Test\Test_concept.pdf
(Moet "D:\test\608-1500870A01\4 Opgeleverd aan OG\Concept\Test\Test_concept.pdf" zijn").

Bij bestand1 en 2 heb ik onder de juiste paden vermeld vanwaar hij het bestand moet halen indien het Excel in een subdirectory staat ipv hoofddirectory
Hoop dat het een beetje duidelijk is.
 
Het wordt steeds onduidelijker. Concentreer je eerst op 1 Excel bestand die in 1 map staat en die als PDF bijlage gemaild moet worden.
Waar staat je Excel document, hoe heet dat document, waar haal je de waarde voor McName vandaan en wat is de inhoud van die variabele.

Ik zal dan die structuur hier namaken en de code voor je maken. Als dat werkt kunnen we kijken naar de wensen die je dan hebt.
 
Code:
        If Not .Range("C25").Value = vbNullString Then
            McName = .Range("C25").Value
        Else
            MsgBox "Mc nummer is niet ingevuld!" & vbCrLf & "Vul die in en probeer opnieuw!", vbOKOnly, "McName"
            Exit Sub
        End If

McName staat elke keer in cel C25.

Het bestandsnaam is het rapportnummer.xlsm (=McName) bv. Mc12345.xlsm.

Het Excel bestand staat of in "D:\test\608-1500870A01\3 Werkdossier\Final" of in "D:\test\608-1500870A01". Dit is afhankelijk of er 1 of meerdere rapporten gemaakt worden onder dezelfde projectnummer (608-1500870A01 = projectnummer).
Bij 1 rapport onder het project nummer staat het Excelbestand in "D:\test\608-1500870A01".
Bij meerdere rapporten staat de Excel bestand in "D:\test\608-1500870A01\3 Werkdossier\Final".

Daarom wil ik 1 code hebben die eerst teruggaat naar het hoofddirectory (D:\test\608-1500870A01\) en van daaruit Bestand1 / Bestand2 opbouwt en zoekt.
 
In je document zie ik:
Code:
Opdrachtnummer		15-00870
Mcnummer		Test

Waar komt dan in die mapnaam de 608- en A01 vandaan?
En waarom staat er in de mapnaam 1500870 terwijl het Opdrachtnummer 15-00870 is?
In je bericht noem je ook een Projectnummer, waar vind ik die?
Vragen, vragen ieder keer, maar ik probeer het duidelijk te krijgen.
 
608 is ons afdeling nummer.
A01 is een opvolgnummer (bij vervolg opdracht of meerwerk, wordt het een A02, A03 etc.)
Projectnummer is hetzelfde als opdrachtnummer in cel C24.
15-00870 -> 15 staat voor het jaar 2015 en 00870 is opvolgnummer. Bij een nieuwe project zal dit dan 15-00871 zijn.
 
Best Edmoor,

Heb je nog gelegenheid gehad om ernaar te kijken?


hoor het graag.

Mvg

Roy.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan