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

[VBA / Excel 2003] E-mails versturen vanuit Excel

Pagina: 1
Acties:

  • Robkazoe
  • Registratie: December 2002
  • Laatst online: 26-11 17:57
Ik zit met een probleem maar ik weet niet zo goed hoe ik deze kan oplossen.

Ik heb een Excelsheet gemaakt welke via een knop verstuurd kan worden. Ik heb ervaring met VBA en het versturen van mails is niet zo'n probleem vanuit Excel. Ook het toevoegen van een bijlage is geen probleem maar met dit Excelformulier wil ik het net even anders.

Is het mogelijk om de informatie uit een Excelsheet te versturen in een e-mail? En dan bedoel ik niet als een bijlage, ik wil dat de informatie tijdens het openen van de mail meteen zichtbaar is. Is het bijvoorbeeld mogelijk om Range A1:B10 te kopieren naar de body als een tabel in een mail (alleen RTF-formaat is beschikbaar)?

Een andere optie die eventueel bruikbaar is, is via Bestand > Verzenden naar... > E-mailadres. Maar die actie is niet op te nemen met de macro-recorder en de VBA-code (als die bestaat?) ken ik niet.

Is hier een oplossing voor te vinden?

Verwijderd

Hoi,

Dit kan op zich wel. Zie hieronder een voorbeeld.
In dit geval haalt de macro de teks uit cel a1.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Emailversturen()

Onderwerp = "test email"
Ontvanger = "ontvanger@email.com"

Tekst = Range("a1").Value

Set App = CreateObject("Outlook.Application")
Set Itm = App.CreateItem(0)
With Itm
.Subject = Onderwerp
.To = Ontvanger
.Body = Tekst
.send

End With
Set App = Nothing
Set Itm = Nothing
End Sub


Outlook zal nu wel een pop-up geven

  • _WgV_
  • Registratie: Februari 2002
  • Laatst online: 23-11 20:20

_WgV_

It's a magical world!

#StopBurningStuff


Verwijderd

en er is ook de htmlbody eigenschap waarmee je het bereik bv. in een tabelletje kan weergeven:
Visual Basic:
1
Itm.HTMLBody=("<html><body><table><tr><td>" & Range("a1").Value & "</td><td>" & Range("a2").Value & "</td></tr></table></body></html>")

  • Robkazoe
  • Registratie: December 2002
  • Laatst online: 26-11 17:57
Verwijderd schreef op donderdag 03 december 2009 @ 11:05:
Hoi,

Dit kan op zich wel. Zie hieronder een voorbeeld.
In dit geval haalt de macro de teks uit cel a1.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Emailversturen()

Onderwerp = "test email"
Ontvanger = "ontvanger@email.com"

Tekst = Range("a1").Value

Set App = CreateObject("Outlook.Application")
Set Itm = App.CreateItem(0)
With Itm
.Subject = Onderwerp
.To = Ontvanger
.Body = Tekst
.send

End With
Set App = Nothing
Set Itm = Nothing
End Sub


Outlook zal nu wel een pop-up geven
Het nadeel is dat je dan maar één value erin kan zetten. Kun je wel zelf gaan zitten prutten een loop te maken maar dan moet je de informatie ook nog eens op een juist format te krijgen. Een wat lastige oplossing, maar bedankt voor het meedenken.
Kijk, naar zoiets was ik op zoek. Het werkt na wat aanpassingen. Bedankt! Zelf kon ik niets vinden op Google/GoT.
Verwijderd schreef op donderdag 03 december 2009 @ 11:24:
en er is ook de htmlbody eigenschap waarmee je het bereik bv. in een tabelletje kan weergeven:
Visual Basic:
1
Itm.HTMLBody=("<html><body><table><tr><td>" & Range("a1").Value & "</td><td>" & Range("a2").Value & "</td></tr></table></body></html>")
De methode zal ongetwijfeld werken, alleen op deze PC is het niet mogelijk om HTML-mails te versturen (waarschijnlijk geblokkeerd) dus RFT of plaintekst. Via de methode van _WgV_ werkt dat wel gewoon.

Allen, bedankt voor het meedenken. Probleem opgelost.

  • _WgV_
  • Registratie: Februari 2002
  • Laatst online: 23-11 20:20

_WgV_

It's a magical world!

Robkazoe schreef op donderdag 03 december 2009 @ 11:37:
[...]


Het nadeel is dat je dan maar één value erin kan zetten. Kun je wel zelf gaan zitten prutten een loop te maken maar dan moet je de informatie ook nog eens op een juist format te krijgen. Een wat lastige oplossing, maar bedankt voor het meedenken.


[...]


Kijk, naar zoiets was ik op zoek. Het werkt na wat aanpassingen. Bedankt! Zelf kon ik niets vinden op Google/GoT.


[...]


De methode zal ongetwijfeld werken, alleen op deze PC is het niet mogelijk om HTML-mails te versturen (waarschijnlijk geblokkeerd) dus RFT of plaintekst. Via de methode van _WgV_ werkt dat wel gewoon.

Allen, bedankt voor het meedenken. Probleem opgelost.
Graag gedaan!

#StopBurningStuff


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 15:28

Reptile209

- gers -

Kleine side-note: hou er rekening mee dat dit systeem waarschijnlijk alleen gaat werken als er een Outlook client is. Ik zit nu op een detacheringsplaats waar we met Lotus Notes (don't get me started :( ) moeten werken en alle geautomatiseerde mailbare excelsheets van mijn gewone werkgever dus niet meer werken. Of daar een handige work-around voor is (en of het voor jou een probleem gaat zijn) weet ik niet, just my 2 cents. :)

Zo scherp als een voetbal!


Verwijderd

de meesten vinden lotus notes maar rommel, ik vind het geweldig. zonder meer de snelste mailclient op windows (factor 10 en beter, maar ik spreek me niet uit over de recentste versie), uitstekende replicatiefunctionaliteit.
ook hier is automatisatie mogelijk: (verwijziging naar lotus domino objects vereist)
Visual Basic:
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
36
37
38
39
40
41
42
43
44
45
sub LotusNotes
  Dim EmailDB     As Domino.NotesDatabase
  Dim EmailDoc    As Domino.NotesDocument
  Dim EmailAtt    As Domino.NotesEmbeddedObject
  Dim EmailRTI    As Domino.NotesRichTextItem
  Dim EmailSessie As Domino.NotesSession
  
  Set EmailSessie = New Domino.NotesSession
  EmailSessie.Initialize ""
  Set EmailDB = _
      EmailSessie.GetDatabase _
        ( _
          EmailSessie.GetEnvironmentString("MailServer", True), _
          EmailSessie.GetEnvironmentString("MailFile", True), _
          False _
        )
  If Not EmailDB.IsOpen Then
    EmailDB.Open
  End If
  Set EmailDoc = EmailDB.CreateDocument
  Set EmailRTI = _
      EmailDoc.CreateRichTextItem("Attachment")
  Set EmailAtt = _
      EmailRTI.EmbedObject _
        ( _
          1454, "", _
          "c:\forum\OFF.xls", "Attachment" _
        )
  EmailDoc.AppendItemValue _
      "Body", _
      "In bijlage een excelbestand."
  EmailDoc.AppendItemValue _
      "Subject", _
      "lotus notes automatisering"
  EmailDoc.AppendItemValue _
      "SendTo", _
      "someone@somewhere.com"
  EmailDoc.SaveMessageOnSend = True
  EmailDoc.Send False
  Set EmailDoc = Nothing
  Set EmailAtt = Nothing
  Set EmailRTI = Nothing
  Set EmailDB = Nothing
  Set EmailSessie = Nothing
end sub

  • _WgV_
  • Registratie: Februari 2002
  • Laatst online: 23-11 20:20

_WgV_

It's a magical world!

Ik maak bij een aantal projecten gebruik van een volledig onafhankelijke e-mail library, CDO_Mail.

Het enige waar deze op dit moment nog geen ondersteuning voor heeft is multiple attachments, maar dat moet simpel op te lossen zijn met een loopje en een array van attachmentpaden.

Visual Basic .NET:
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
36
37
38
39
40
41
42
43
44
45
46
47
Sub CDO_Mail(strSMTPServer As String, intSMTPServerPort As Integer, bUseSSL As Boolean, _
    bSMTPAuthenticate As Boolean, strFromAddress As String, strTo As String, _
    Optional strFromName As String, Optional strUserName As String, _
    Optional strPassword As String, Optional strSubject As String, _
    Optional strBody As String, Optional strCC As String, Optional strBCC As String, _
    Optional strReplyTo As String, Optional strAttachmentPaths As Variant)
    
    Dim iMsg As Object
    Dim iConf As Object
    Dim Flds As Variant
    Dim i As Integer
    
    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")

    iConf.Load -1    ' CDO Source Defaults
    Set Flds = iConf.Fields
    With Flds
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = bUseSSL
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = bSMTPAuthenticate
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = strUserName
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPassword
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPServer
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = intSMTPServerPort
        .Update
    End With

    With iMsg
        Set .Configuration = iConf
        .to = strTo
        .cc = strCC
        .BCC = strBCC
        .FROM = Chr(34) & strFromName & Chr(34) & " " & "<" & strFromAddress & ">"
        .Subject = strSubject
        .TextBody = strBody
        .replyto = strReplyTo
        If isarray(strAttachmentPaths)
        For i = 0 To UBound(strAttachmentPaths)
                   If strAttachmentPaths(i) <> "" Then
                       .AddAttachment strAttachmentPaths(i)
                   End If
               Next i
        End if
        .Send
    End With
End Sub

[ Voor 4% gewijzigd door _WgV_ op 07-06-2010 01:04 . Reden: Code geupdate, nu ondersteuning voor meerdere attachments ]

#StopBurningStuff

Pagina: 1