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

Gedeelte Excel werkblad in body e-mail via macro

Status
Niet open voor verdere reacties.

Kevercat

Gebruiker
Lid geworden
11 aug 2008
Berichten
88
Hallo,

Graag zou ik een deel van een werkblad in een e-mail willen verzenden, via een macro in het werkblad, maar niet in een bijlage maar gewoon in de body. Nu heb ik een deel van de code:
Code:
Sub Verzenden()
'
' Verzenden Macro

' Verzenden via mail.
Err.Number = 0
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
If Err.Number > 0 Then
Set OutApp = CreateObject("Outlook.Application")
Err.Clear
End If
On Error GoTo 0
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
With OutMail
    .To = "kever@kevercat.nl"
    .CC = ""
    .BCC = ""
    .Subject = "Storingsmelding" & " " & Range("B2")
    .Body = Range("A1:B10")##"Met vriendelijke groet, ##
    .send
    
End With
Set OutMail = Nothing
Set OutApp = Nothing
        
' Formulier wissen

    Range("B2:B10").Select
    Range("B5").Activate
    Selection.ClearContents
    Range("B2").Select
    
' Venster zegt .
MsgBox " Storingsmelding is correct verwerkt "
End Sub

Helaas krijg ik een fout melding bij de body. Wat wil ik hier?
Graag zou ik de vermelde range A1:B10 in de body willen hebben en daarna twee enters, vervolgens de tekst " Met vriendelijke groet," dan weer twee enters en dat liefst de naam van de verzender maar ik heb geen idee waar ik dat vandaan moet halen.

Heeft iemand een idee hoe ik dit op de juiste manier moet afmaken?

Alvast heel erg bedankt voor de hulp.
 
Doe er eens een gelijkend vb bestandje bij.
Ik zie direct een paar fouten, maar ik heb geen zin om iets na te kloppen.
 
Die body is ook niet correct zo natuurlijk. Dat had gast0660 ook al gezien. Doe het eens zo:
.Body = Range("A1:B10") & vbCrLf & vbCrLf & "Met vriendelijke groet," & vbCrLf & vbCrLf & Application.Username

Maar die Range("A1:B10") krijg je er zo ook niet in.
Wat staat er in dat bereik en hoe wil je dat getoond hebben in de body?
 
Laatst bewerkt:
Hoi Kees,

Waar krijg je die foutmelding en wat is ie?
 
Die body is ook niet correct zo natuurlijk. Dat had gast0660 ook al gezien. Doe het eens zo:
.Body = Range("A1:B10") & vbCrLf & vbCrLf & "Met vriendelijke groet," & vbCrLf & vbCrLf & Application.Username

Maar die Range("A1:B10") krijg je er zo ook niet in.
Wat staat er in dat bereik en hoe wil je dat getoond hebben in de body?

De Range bestaat uit een tabel met twee kolommen en 10 regels. Links de vragen en rechts de antwoorden, iets heel simpels dus maar dat moet wel zo getoond worden in de body. Ik had het eerst als bijlage maar dat is niet de bedoeling.
Ik kan op dit moment even niet bij de computer om het bij te voegen of uit te proberen, dat doe ik wel als ik er weer bij ben.
 
Hoi Kees,

Waar krijg je die foutmelding en wat is ie?

De foutmelding komt bij de regel met de body, ik kan er nu even niet bij maar het is iets als “verwacht eindmarkering”.
Ik weet dat de body regel niet goed is maar weet niet hoe dit op te lossen.
 
Doe er eens een gelijkend vb bestandje bij.
Ik zie direct een paar fouten, maar ik heb geen zin om iets na te kloppen.

Een VB bestand wordt niet geaccepteerd, ik heb er dus maar een txt bestand van gemaakt.
 

Bijlagen

Daar hebben we niks aan.
Je kan hier gewoon een Excel bestand met een voorbeeld plaatsen.
 
We wachten wel op uw vb bestandje, dan komt dat zeker in orde.
 
Je zal alles moeten omzetten in HTML. De opmaak uit het blad gaat wel verloren maar is via HTML ook nog wel weer netjes te krijgen.

Code:
Sub VenA()
  c00 = "Beste,<BR><BR><table border=1 bgcolor=#00FF7F#>"
  ar = Range("A1:B10")
  For j = 1 To UBound(ar)
    c00 = c00 & "<tr><td>" & Join(Application.Index(ar, j), "</td><td>") & "</td></tr>"
  Next j
  c00 = c00 & "</table><P></P><P></P><BR><BR>Met vriendelijke groet,"
  
  With CreateObject("Outlook.Application").CreateItem(0)
    .to = "kever@kevercat.nl"
    .Subject = "Storingsmelding" & " " & Range("B2")
    .HTMLBody = c00
    .display
  End With

  Range("B2:B10").ClearContents
End Sub
 
Laatst bewerkt:
Je zal alles moeten omzetten in HTML. De opmaak uit het blad gaat wel verloren maar is via HTML ook nog wel weer netjes te krijgen.

Code:
Sub VenA()
  c00 = "Beste,<BR><BR><table border=1 bgcolor=#00FF7F#>"
  ar = Range("A1:B10")
  For j = 1 To UBound(ar)
    c00 = c00 & "<tr><td>" & Join(Application.Index(ar, j), "</td><td>") & "</td></tr>"
  Next j
  c00 = c00 & "</table><P></P><P></P><BR><BR>Met vriendelijke groet,"
  
  With CreateObject("Outlook.Application").CreateItem(0)
    .to = "kever@kevercat.nl"
    .Subject = "Storingsmelding" & " " & Range("B2")
    .HTMLBody = c00
    .display
  End With

  Range("B2:B10").ClearContents
End Sub

Dit doet precies wat ik wil. Ik heb .Display gewijzigd in .Send omdat de tussenkomst van de verzender niet meer nodig is. na het klikken op de knop moet het bericht verstuurd worden.

Bedankt voor alle hulp!
 
Dan mag je de vraag nog even op opgelost zetten.

Nb. Het quoten is niet nodig en in voorbeeldcode gebruik ik altijd .display of voor het printen .PrintPreview om te voorkomen dat er steeds mail verzonden wordt of dat iemands printer onverwacht wat nutteloos gaat doen.:d
 
Sorry, weer wat geleerd

Ik zal eens kijken hoe ik de vraag op opgelost kan zetten via mijn telefoon anders moet ik weer naar de computer.
 
Ik mis nog iets.

vervolgens de tekst " Met vriendelijke groet," dan weer twee enters en dat liefst de naam van de verzender maar ik heb geen idee waar ik dat vandaan moet halen.

Code:
c00 = c00 & "</table><P></P><P></P><BR><BR>Met vriendelijke groet,</table><P></P><P></P><BR><BR>" & CreateObject("Outlook.application").GetNamespace("MAPI").GetDefaultFolder(6).Items(1).receivedbyname
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan