MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 16.05.2019, 14:02   #1
blownlightbulb
Neuer Benutzer
Neuer Benutzer
Standard VBA - Mail aus Excel per VBA

Hallo,

ich möchte aus einem Makro heraus eine Mail verschicken die etwas vorgefertigetn Text und Zelleninhalt enthält.
Am liebsten hätte ich es, wenn ich die Spalten fest deklarieren kann und dann alle Zeilen die da sind mitgeschickt werden (al Tabelle).

Ich habe es schon geschafft, das in der Mail der Inhalt einer Zelle steht, aber einen Bereich bekomme ich nicht hin.

Code:

With objMail
    .To = "xyz@abc.de"
    .Subject = "XXX"
    .Body = "Guten Morgen, hier die aktuellen Daten: " + vbCrLf + vbCrLf + vbCrLf + Sheets(2).Range("F1", "Q2") + "Test"

End With
Am liebsten wäre mir wenn die Range mit xlDown die Zeilen markiert, aber ich weiß nicht wie.

Vielen Dank schonmal für eure Hilfe
blownlightbulb ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 14:17   #2
Storax
MOF Koryphäe
MOF Koryphäe
Standard

Hier steht IMHO alles, was man dazu wissen muss

__________________

How do I ask a good question?
Storax ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 14:37   #3
Nepumuk
MOF Koryphäe
MOF Koryphäe
Standard

Hallo,

teste mal:

Option Explicit

Public Sub Mail()
    Dim objOutlook As Object, objMail As Object
    Dim strBody As String
    With ActiveSheet
        strBody = RangeToHTML(.Name, .Range(.Cells(1, 6), .Cells(.Cells(.Rows.Count, 6).End(xlUp).Row, 17)).Address)
    End With
    Set objOutlook = CreateObject(Class:="Outlook.Application")
    Set objMail = objOutlook.CreateItem(0)
    With objMail
        .To = "xyz@abc.de"
        .Subject = "XXX"
        .HTMLBody = "Guten Morgen, hier die aktuellen Daten: " & vbCrLf & vbCrLf & vbCrLf & strBody
        Call .Display 'anzeigen
        'Call .Send 'senden
    End With
    Set objMail = Nothing
    Set objOutlook = Nothing
End Sub

Private Function RangeToHTML(ByVal pvstrWorksheetName As String, ByVal pvstrRangeAddress As String) As String
    Const ForReading As Long = 1
    Const TristateUseDefault As Long = -2
    Dim objFileSystemObject As Object, objFile As Object
    Dim objTextStream As Object, objPublishObject As PublishObject
    Dim strPath As String, strTemp As String
    strPath = Environ$("Tmp") & "\Mail_" & Format$(Now, "dd-mm-yyyy_Hh-Nn-Ss") & ".htm"
    Set objPublishObject = ThisWorkbook.PublishObjects.Add( _
        SourceType:=xlSourceRange, _
        Filename:=strPath, _
        Sheet:=pvstrWorksheetName, _
        Source:=pvstrRangeAddress, _
        HtmlType:=xlHtmlStatic)
    Call objPublishObject.Publish(Create:=True)
    Set objFileSystemObject = CreateObject(Class:="Scripting.FileSystemObject")
    Set objFile = objFileSystemObject.GetFile(strPath)
    Set objTextStream = objFile.OpenAsTextStream(iomode:=ForReading, Format:=TristateUseDefault)
    strTemp = objTextStream.ReadAll
    RangeToHTML = Replace(Expression:=strTemp, Find:="align=center x:publishsource=", _
        Replace:="align=left x:publishsource=")
    objTextStream.Close
    Call Kill(PathName:=strPath)
    Set objTextStream = Nothing
    Set objFile = Nothing
    Set objFileSystemObject = Nothing
    Set objPublishObject = Nothing
End Function

__________________

Gruß
Nepumuk

Geändert von Nepumuk (16.05.2019 um 14:54 Uhr).
Nepumuk ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 15:11   #4
blownlightbulb
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

@ Storax - danke, da muss ich mich mal reinfuxen

@ Nepumuk - wenn ich das richtig verstehe, ist das ja genau, das was ich will - vielen Dank, aber leider bekomme ich einen Fehler:

Anwendung- oder objektdefinierter Fehler

Set objPublishObject = ThisWorkbook.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=strPath, _
Sheet:=pvstrWorksheetName, _
Source:=pvstrRangeAddress, _
HtmlType:=xlHtmlStatic)

Die Function RangeToHTML verstehe ich leider gar nicht, das ist mir zu hoch
blownlightbulb ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 15:42   #5
Nepumuk
MOF Koryphäe
MOF Koryphäe
Standard

Hallo,

ich kann den Fehler nicht nachvollziehen, denn der Code läuft bei mir ohne Probleme. Lade mal deine Mappe hoch.

__________________

Gruß
Nepumuk
Nepumuk ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 16:00   #6
blownlightbulb
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Ahhhhhhh

habe gerade die Datei fertig gemacht zum hochladen und noch mal probiert und es geht.
ABER: nur wenn ich das Makro in der Datei speichere, nicht wenn es in der personal.xlsb ist.
Da ich die Datei aber jeden Tag überschreibe muss ich es ja in der personal Datei speichern.

Woran kann das liegen?
blownlightbulb ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 16:42   #7
Luschi
MOF Meister
MOF Meister
Standard

Hallo blownlightbulb,

in diesem Fall ändere die folgende Vba-Zeile von

Set objPublishObject = ThisWorkbook.PublishObjects.Add( _
in
Set objPublishObject = ActiveWorkbook.PublishObjects.Add( _
ab und die E-Mailerstellung klappt.

Gruß von Luschi
aus klein-Paris
Luschi ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 16.05.2019, 19:23   #8
Storax
MOF Koryphäe
MOF Koryphäe
Standard

Wie ich gesagt habe, steht alles im Link oben, hier wahrscheinlich Dein Anwendungsfall.

Aber, so wie es aussieht, geht das über Deinen Kopf, da empfehle ich hier alles durchzuarbeiten.

__________________

How do I ask a good question?
Storax ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 17.05.2019, 15:05   #9
blownlightbulb
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

@ Luschi vielen Dank - funktioiert

@ Storax - danke für den Link - da werde ich mich in den nächten Wochen durcharbeiten


letzte Frage: kann ich die Formatiereung noch übernehmen? also, dass eine Tabelle eingefügt wird - wäre besser lesbar


Vielen Dank an alle und ein schönes Wochenende
blownlightbulb ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 03.06.2019, 18:26   #10
padre2000
Neuer Benutzer
Neuer Benutzer
Standard

Hallo zusammen , komme leider nicht auf den Trichter : was macht der Befehl
" Environ$ " in dieser Zeile ? Was ist der Zweck davon ?! :

strPath = Environ$("Tmp") & "Mail_" & Format$(Now, "dd-mm-yyyy_Hh-Nn-Ss") & ".htm"
padre2000 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.06.2019, 09:04   #11
derHoepp
MOF Profi
MOF Profi
Standard

Moin Padre,

die Environ()-Funktion gibt den Inhalt diverser Umgebungsvariablen zurück. Eine dieser Variablen ist zum Beispiel Tmp. Diese gibt den Pfad zum Windows-Temp-Verzeichnis auf dem konkreten Rechner zurück.

Viele Grüße
derHöpp
derHoepp ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.06.2019, 09:29   #12
mumpel
MOF Meister
MOF Meister
Standard

Das Dollar-Zeichen hinter "Environ" ist m.W. heutzutage obsolet, kann man also auch weglassen.
mumpel ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.06.2019, 19:20   #13
padre2000
Neuer Benutzer
Neuer Benutzer
Standard

Ah ok verstehe jetzt... Danke
padre2000 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.06.2019, 19:24   #14
padre2000
Neuer Benutzer
Neuer Benutzer
Standard

Das heißt ich muss erstmal die Umgebungsvariable "Tmp" in Windows definieren... und darauf greifen wir direkt über die Environ Funktion ?
padre2000 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.06.2019, 19:40   #15
RPP63neu
MOF Meister
MOF Meister
Standard

Moin und Nein!
Umgebungsvariablen werden von Windows belegt, ohne dass Du etwas tun musst.
Folgendes Makro listet Dir alle vergebenen Variablen in einem vorher leeren(!) Tabellenblatt auf:
Code:

Sub List_Environment_Variables()
Dim EnvString As String, indx As Integer
indx = 1
Do
    EnvString = Environ(indx)
    Cells(indx, 1) = EnvString
    indx = indx + 1
Loop Until EnvString = ""
End Sub
Gruß Ralf

__________________

Meine Logik war nicht fehlerhaft, nur meine Interpretation!
Tuvok
RPP63neu ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.