Verzenden per email Outlook VBA

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Onderstaand een code. Wat ik wil is een optie om direct de factuur ook te emailen naar een email adres die in de klantcontactgegevens staat. De email adressen staan onderelkaar in kolom M op tabblad: Debiteuren .

De contactgegevens worden benaderd via kolom A. Dit gebeurd via een formule in de formulebalk en dus niet via VBA.

Ik heb eerlijk gezegd alleen nog geen idee waar en wanneer ik de mail wil laten doen. Wel moet ik hier een msgbox voor zien zodra de optie verzenden via email is gekozen in tabblad: Factuur maken, cel: C40. In deze mailbox moet dan staan:" Wilt u de mail verzenden naar emailadres (Tabblad Factuur maken, cel G40:L40) De keuze JA of NEE dient dan gemaakt te worden. Echter dit stuk probeer ik zelf nog uit te werken.

Wie kan mij hierbij verder helpen.

Mijn email gaat via Outlook en dient te worden verstuurd via emailadres: factuur@homburg-etikb.nl

Het onderwerp is dan: Factuur, gevolg door het factuurnummer die vermeld staat in tabblad Factuur maken, cel: C30.

Code:
Sub Factuur_Opslaan1() 'Verstuurde facturen
'Knop
    On Error Resume Next
    Select Case Sheets("Factuur maken").Range("C28")
    Case Is = ""
        MsgBox ("Er is geen factuurtype geselecteerd." & vbNewLine & vbNewLine & "Kies na OK het factuurtype"), vbInformation, "Factuurtype"
        Call Factuur_maken 'Module 1
        Exit Sub
    Case Else
    
        rMkDir "D:\Facturatie\Facturen PDF\Facturen\" & Year(Date)
        Sheets("Factuur").ExportAsFixedFormat 0, "D:\Facturatie\Facturen PDF\Facturen\" & Year(Date) & "\" & Sheets("Factuur").Range("I13").Value & ".pdf"
        
        With Sheets("Factuur")
        ThisWorkbook.Worksheets("Verstuurde_Facturen").Unprotect "1235"
            Select Case Sheets("Factuur maken").Range("C32")
            Case Is = ""
                MsgBox ("Er is geen of een ongeldig BTW tarief geselecteerd." & vbNewLine & vbNewLine & "Kies na OK het BTW tarief"), vbInformation, "BTW tarief"
                Call Factuur_maken 'Module 1
                Exit Sub
            Case Is = "Standaard"
                Sheets("Verstuurde_Facturen").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 18) = Array(.Range("I13"), .Range("A3"), .Range("I12"), ['Factuur maken'!C40], _
                .Range("I11"), .Range("C52"), ['Factuur maken'!C36], .Range("H6"), ['Factuur maken'!C32], .Range("H40"), .Range("E42"), .Range("E43"), .Range("H44"), .Range("H46"), "0", "0", "0", .Range("B13"))
            Case Is = "Verlegd"
                Sheets("Verstuurde_Facturen").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 18) = Array(.Range("I13"), .Range("A3"), .Range("I12"), ['Factuur maken'!C40], _
                .Range("I11"), .Range("C52"), ['Factuur maken'!C36], .Range("H6"), ['Factuur maken'!C32], .Range("H40"), "0", "0", "0", "0", .Range("E42"), .Range("E43"), .Range("E44"), .Range("B13"))
            Case Else
                Exit Sub
            End Select
        End With
    End Select
    ThisWorkbook.Worksheets("Verstuurde_Facturen").Protect "1235"
    
    With Frm_004
        .Caption = " Opslaan_Printen"
        .Label1 = vbNewLine & vbNewLine & " Uw factuur is opgeslagen in de database." & vbNewLine & vbNewLine & " Wilt u deze ook uitprinten?"
        .cb_Opdracht_1.Caption = "JA"
        .cb_Opdracht_2.Visible = False
        .cb_Opdracht_3.Caption = "NEE"
        .Show
    End With
    
End Sub
 
Laatst bewerkt:
Ik heb eerlijk gezegd alleen nog geen idee waar en wanneer ik de mail wil laten doen. Wel moet ik hier een msgbox voor zien zodra de optie verzenden via email is gekozen in tabblad: Factuur maken, cel: C40. In deze mailbox moet dan staan:" Wilt u de mail verzenden naar emailadres (Tabblad Factuur maken, cel G40:L40) De keuze JA of NEE dient dan gemaakt te worden. Echter dit stuk probeer ik zelf nog uit te werken.


=========

Bovenstaande is opgelost. Nu alleen het verzenden van de email nog. Wie o wie.
 
Je code heb ik niet geanalyseerd, maar ik vermoed dat je op zoek bent naar een stukje VBA-code om via Outlook een email te verzenden vanuit Excel. Ooit heb ik eens een Udf daarvoor gemaakt. De code vind je hierna. Misschien kan je die gebruiken.

Code:
''''''''''''''''''''''''''''''''''''''
'Deze Udf zendt een email via Outlook.
''''''''''''''''''''''''''''''''''''''
Sub SendMailFromOutlook(ByVal cAddress As String, _
                        ByVal cSub As String, _
                        ByVal cBody As String, _
                        ByVal cAttachments As String)

Dim olApp As Object
Dim olMail As Object
Dim aAttachments() As String
Dim i As Integer

'De eerste drie parameters zijn strings die we zonder meer kunnen gebruiken.
'De parameter met de attachments kan een string zijn met meerdere bestandsnamen,
'gescheiden door een komma. Die zetten we om in een array.
If cAttachments <> vbNullString Then
  aAttachments = Split(cAttachments, ",")
End If

On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If Err.Number > 0 Then
  Set olApp = CreateObject("Outlook.application")
End If
On Error GoTo 0

'De ingebouwde constante olMailItem gebruiken we niet, dan hoeft de Outlook
'Object Library niet bij de references te staan.
Set olMail = olApp.CreateItem(0)

With olMail
  .To = cAddress
  .Subject = cSub
  .Body = cBody
  
  'Als we geen attachments doorgekregen hebben, dan is aAttachments een
  'lege array.
  If Not IsEmptyArray(aAttachments) Then
    For i = 0 To UBound(aAttachments)
      If Dir(aAttachments(i)) <> vbNullString Then
        .Attachments.Add aAttachments(i)
      End If
    Next
  End If
  
  .Display
End With

Set olMail = Nothing
Set olApp = Nothing

End Sub

Grtz,
MDN111.
 
@snb:

Ja, inderdaad. In feite is het geen functie, wel een Sub. Noemen we dat dan een UDS ?
 
MDN111. Het bestand wordt in eerste plaats opgeslagen als PDF bestand in een bepaalde directory van mijn harde schijf. Ik krijg hiervoor een infobox (userform) te zien met de keuze of ik het bestand ook wil printen. Als ik de optie Email gekozen heb dan komt er na deze infobox een nieuwe infobox met daarin de vraag of ik de factuur per email adres wil verzenden. Het is dan de bedoeling dat het opgeslagen PDF bestand wordt ingesloten als bijlage in Outlook en automatisch wordt verzonden zonder dat ik hier verder handelingen voor hoef te verrichten in outlook zelf. Dus feitelijk mag outlook niet geopend worden en dient alles achter de schermen plaats te vinden. Zodra deze handeling is verricht worden de invoercellen van het tabblad factuur maken, gewist en klaar gemaakt voor de volgende invoer om vervolgens weer opnieuw in de cirkel te stappen.


Ik heb inderdaad enkel het vba nodig die ik in VBA kan plakken. Ik weet al waar ik deze plaats.
 
Laatst bewerkt:
Ja op deze manier heb ik er niets aan.

Er bestaat toch gewoon een code om outlook te openen, de bewuste bijlage te plaatsen, het emailadres volgens contactgegevens te plaatsen, eventueel een tekst te schrijven ,etc en dan de mail te verzenden.
 
@ masala09:

Dat is wat die macro doet als je de regel ".display" vervangt door ".send".

Als op een gegeven moment de gebruiker kiest om de factuur te verzenden dan ken jij, in je code, op dat moment het adres, het onderwerp, de tekst en de path van het .pdf-bestand. Je kan dan die macro aanroepen en deze gegevens als parameter doorgeven. Veronderstel dat die gegevens in variabelen staan, dan heb je bijvoorbeeld: Het adres staat in de variabele cAdres, het onderwerp in de variabele cOnderwerp, de tekst in cInhoud en de path van het .pdf-bestand in cPath. Je kan dan de macro aanroepen als volgt:

Code:
Call SendMailFromOutlook(cAdres, cOnderwerp, cInhoud, cPath)

In plaats van in variabelen kunnen de gegevens ook in cellen staan, dan geef je de waarden uit die cellen door als parameters.

@snb:

Ik begrijp je punt. Het is een onzorgvuldig taalgebruik van mijnentwege dat afstamt vanuit het Clipper-tijdperk. Toen noemden we alle stukjes code gewoon een UDF, maar in dit geval kunnen we inderdaad beter over een "macro" spreken.

Grtz,
MDN111.
 
MDN111.... HUH?? Ik moet toch een volledige code hebben??....... Alle gegevens staan in cellen die dan direct zonder omweg in de gegevens van outlook op de juiste plaatst geplaatst moeten worden en dan meteen na controle verzonden kan worden. Eerst wilde ik het direct doen achter de schermen, maar het lijkt mij beter om dat juist niet te doen. Zo heb ik net even meer controle op het geheel. Mooi zou zijn dat ik een mogelijkheid kan krijgen om de zaken in concepten te zetten en dan zodra ik echt klaar ben de boel openen en verzenden.
 
Clipper ?, Cllipper ??, Clipper ???

Hoor ik daar een jaren 80 bel rinkelen ?
 
@masala09:

Als je toch eerst een "even een controle op het geheel" wil hebben, dan mag de regel .display blijven staan.

Die macro gebruikte men op m'n vorig werk om het aanvragen, ontvangen en terugzenden van onderdelen op te volgen. Voor elke faze in dat proces moest een mail verzonden worden en dat gebeurde met een knop vanuit een Excel-blad. Dat leek mij nauw aan te sluiten met jou behoefte, vandaar dat ik op je vraag antwoordde. Het bestand dat wij destijds gerbuikten, heb ik gestript tot het uiterste minium en als bijlage bijgevoegd. Wil je dat eens testen? Probleem is dat ik het zelf niet kan testen want ik heb geen Outlook op m'n computer.

@snb:

Yes ! dBaseIII en Clipper. Those were the days. "Excel" bestond toen nog niet. Het rekenblad van Microsoft heette toen "Multiplan". Nostalgie :)

Grtz,
MDN111.
 

Bijlagen

Laatst bewerkt:
Uit de tijd dat ik Supercalc gebruikte....
 
Ja, dat is dus een probleem. Zoals ik al zei heb ik geen Outlook op m'n computer. Maar omdat ik je antwoord over die foutmelding las, heb ik m'n DVD's genomen en Outlook toch geïnstalleerd. Ik heb dan het bestand eens getest en bij mij werkt het wel. Na klikken op de knop komt het verzendscherm voor een nieuwe mail in beeld, met de gegevens uit het Excelbestand waar ze moeten staan.

Kan u meedelen hoe de foutmelding luidt? Evenueel screenshot bijvoegen?

Grtz,
MDN111.
 
Fout 91 tijdens uitvoering:

Object variabele of Blok variabele With is niet ingesteld






Dat is de foutmelding
 
Laatst bewerkt:
Doe eens een test met Outlook geopend en een test met Outlook niet geopend. Is er een verschill ?
 
Sorry voor de late reactie. Komt door drukte.

Nee maakt geen verschil. Ook ben ik er nog steeds niet uit.
 
Ik moet trouwens even iets corrigeren. Ik heb iets ontdekt. Ik gebruik geen outlook, maar windows live mail.

Nu weet ik niet of daar verschil in zit, maar toch bij deze.
 
Interessante melding na 19 berichten in deze draad. Daar maak je vrienden mee.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan