Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Komplette Daten aus Tabelle ziehen

Komplette Daten aus Tabelle ziehen
28.01.2014 14:40:34
Gregy

Hallo,
ich habe folgendes Problem: ich möchte aus einer Excel-Tabelle Daten per E-Mail versenden.  _
Folgendes habe ich hinter dem jeweiligen CommandButton hinterlegt:

Private Sub CommandButton1_Click()
Dim Outlook As Object, Mail As Object, Wiederholungen, Ablage As DataObject, _
Nachricht, Bereich As Range, Empfänger As String, Betreff As String
Empfänger = Sheets("Liste").Range("G69").Value
Betreff = "Offene ToDo"
If Betreff = "" Then Exit Sub
For Wiederholungen = 1 To 1
Set Ablage = New DataObject
Set Outlook = CreateObject("Outlook.Application")
Set Nachricht = Outlook.CreateItem(0)
Set Bereich = Application.InputBox("Wählen Sie den Bereich aus Sie den versenden möchten", Type: _
_
=8)
Range(Bereich.Address).Select
Selection.Copy
With Nachricht
.Subject = Betreff
Ablage.GetFromClipboard
.Body = Ablage.GetText(1)
.To = Empfänger
.Display
End With
Set Outlook = Nothing
Set Nachricht = Nothing
Next Wiederholungen
End Sub 
Bis auf eine Kleinigkeit funktioniert es auch super. Ich klicke auf den Button und werde  _
lediglich nach dem zu versendenden Bereich gefragt. Nachdem ich den eingegeben oder
markiert habe wird mir die
versandbereite Email angezeigt. Leider werden meine kompletten Daten nur als Text ausgegeben ( _
was natürlich an dem Befehl ".Body = Ablage.GetText(1)" liegt).
Wie kann ich es realisieren, dass meine Tabelle als zuvor definierter Bereich im  _
Ursprungsformat in meine E-Mail übertragen wird?
Vielen Dank für Eure Hilfe
Beste Grüße

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Komplette Daten aus Tabelle ziehen
28.01.2014 15:10:46
Klaus
Wie kann ich es realisieren, dass meine Tabelle als zuvor definierter Bereich im _
Ursprungsformat in meine E-Mail übertragen wird?

Hi Gregy,
ganz einfach: Das geht nicht. Um in der Mail eine Tabelle nachzubauen, musst du stattdessen den "BodyText" der Mail mit den entsprechenden HTML-Befehlen füttern.
Ungefähr so:
Private Sub CommandButton1_Click()
Dim Outlook As Object, Mail As Object, Wiederholungen, Ablage As DataObject, _
Nachricht, Bereich As Range, Empfänger As String, Betreff As String
Empfänger = Sheets("Liste").Range("G69").Value
Betreff = "Offene ToDo"
If Betreff = "" Then Exit Sub
For Wiederholungen = 1 To 1
Set Ablage = New DataObject
Set Outlook = CreateObject("Outlook.Application")
Set Nachricht = Outlook.CreateItem(0)
Set Bereich = Application.InputBox("Wählen Sie den Bereich aus Sie den versenden möchten", Type: _
=8)
'Range(Bereich.Address).Select
'Selection.Copy
Dim sText As String
Dim i As Long
Dim j As Long
With Bereich
sText = "
" For j = 1 To .Rows.Count sText = sText & "" For i = 1 To .Columns.Count sText = sText & "" Next i sText = sText & "" Next j sText = sText & "
" & .Cells(j, i).Value & "
" End With With Nachricht .Subject = Betreff ' Ablage.GetFromClipboard ' .Body = Ablage.GetText(1) Dim olOldBody As String olOldBody = .htmlBody .htmlBody = sText & olOldBody .To = Empfänger .Display End With Set Outlook = Nothing Set Nachricht = Nothing Next Wiederholungen End Sub In dem Code ist aber noch so einiges anderes im argen ...

Betreff = "Offene ToDo"
If Betreff = "" Then Exit Sub

Was soll das IF? Selbst wenn du den Betreff überprüfen willst, kannst du hier doch nicht mir EXIT SUB rausgehen!
For Wiederholungen = 1 To 1

Aha. Ich vermute, du hast ein Script für ein Excel-Massenmail kopiert und angepasst, aber nicht verstanden?
Set Bereich = Application.InputBox("Wählen Sie den Bereich aus Sie den versenden möchten", Type: _
=8)
Range(Bereich.Address).Select
Selection.Copy

Range(Bereich.Address).Copy macht das gleiche ohne Umweg. Bereich ist bereits ein Range, kann also auch direkt angesprochen werden mit Bereich.Copy oder sogar ohne den Umweg über die Bereich Variable: Application.InputBox("Wählen Sie den Bereich aus Sie den versenden möchten", Type:=8).Address.Copy
Ich hab im meinem Codevorschlag nur die nötigsten Änderungen vorgenommen. Aber nimm dir mal die Zeit, deinen Code von A bis Z durchzuarbeiten, zu verstehen und zu entschlacken!
Grüße,
Klaus M.vdT.

AW: Komplette Daten aus Tabelle ziehen
Rudi

Hallo,
dafür musst du den Bereich in HTML-Code umwandeln und in den HTMLBody der Mail einfügen.
Private Sub CommandButton1_Click()
Dim Outlook As Object, Mail As Object, Wiederholungen, _
Nachricht, Bereich As Range, Empfänger As String, Betreff As String
Empfänger = Sheets("Liste").Range("G69").Value
Betreff = "Offene ToDo"
If Betreff = "" Then Exit Sub
For Wiederholungen = 1 To 1
Set Outlook = CreateObject("Outlook.Application")
Set Nachricht = Outlook.CreateItem(0)
Set Bereich = _
Application.InputBox("Wählen Sie den Bereich aus Sie den versenden möchten", Type:=8)
With Nachricht
.Subject = Betreff
.htmlBody = RangetoHTML(Bereich)
.To = Empfänger
.Display
End With
Set Outlook = Nothing
Set Nachricht = Nothing
Next Wiederholungen
End Sub
Function RangetoHTML(rng As Range)
Dim Fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error GoTo 0
End With
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ts = Fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
TempWB.Close savechanges:=False
Kill TempFile
Set ts = Nothing
Set Fso = Nothing
Set TempWB = Nothing
End Function

Gruß
Rudi
Anzeige
AW: Komplette Daten aus Tabelle ziehen
28.01.2014 15:26:34
Rudi
Hallo,
dafür musst du den Bereich in HTML-Code umwandeln und in den HTMLBody der Mail einfügen.
Private Sub CommandButton1_Click()
Dim Outlook As Object, Mail As Object, Wiederholungen, _
Nachricht, Bereich As Range, Empfänger As String, Betreff As String
Empfänger = Sheets("Liste").Range("G69").Value
Betreff = "Offene ToDo"
If Betreff = "" Then Exit Sub
For Wiederholungen = 1 To 1
Set Outlook = CreateObject("Outlook.Application")
Set Nachricht = Outlook.CreateItem(0)
Set Bereich = _
Application.InputBox("Wählen Sie den Bereich aus Sie den versenden möchten", Type:=8)
With Nachricht
.Subject = Betreff
.htmlBody = RangetoHTML(Bereich)
.To = Empfänger
.Display
End With
Set Outlook = Nothing
Set Nachricht = Nothing
Next Wiederholungen
End Sub
Function RangetoHTML(rng As Range)
Dim Fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error GoTo 0
End With
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
Set Fso = CreateObject("Scripting.FileSystemObject")
Set ts = Fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
TempWB.Close savechanges:=False
Kill TempFile
Set ts = Nothing
Set Fso = Nothing
Set TempWB = Nothing
End Function

Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige