Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBA - Tabellenformatierung in Mail beibehalten

Frage Entwicklung VB for Applications

Mitglied: 106543

106543 (Level 2)

03.05.2013 um 09:52 Uhr, 7016 Aufrufe, 10 Kommentare

Hi Leute

immer noch bin ich am selben Tool dran und immer noch bereitet mir die tabelle Kopfzerbrechen

habe folgenden Code:
01.
Sub Mail_senden() 
02.
 
03.
sNachricht = UserForm1.TextBox_Mailtext.Text 
04.
 
05.
If sBetreff = "" Or sNachricht = "" Or sEmpfänger = "" Then 
06.
    MsgBox "Es muss ein Betreff, ein Text und ein Empfänger für die Nachricht gegeben sein." & vbCrLf & "Bitte die Ressourcen-Listen überprüfen.", , "Error" 
07.
    Call Log_Meldung("Entweder Betreff, Nachricht oder Empfänger leer. Abbruch des Mailversands.") 
08.
    Exit Sub 
09.
End If 
10.
 
11.
If UserForm1.Option_Retoure = True Then 
12.
    Dim iZelle2 As String 
13.
    For i = 2 To 40 
14.
        If Worksheets(2).Cells(i, 1) = "" Then 
15.
            i = i - 1 
16.
            Exit For 
17.
        End If 
18.
    Next 
19.
    sZelle2 = "D" & i 
20.
    ThisWorkbook.Sheets("Tabelle2").Select 
21.
    Range("A1", sZelle2).Select 
22.
    Application.Selection.Copy 
23.
     
24.
    Dim oClipboard As Object 
25.
    Dim sClipBoardString As String 
26.
    Set oClipboard = New DataObject 
27.
    oClipboard.GetFromClipboard 
28.
    sClipBoardString = oClipboard.GetText 
29.
    sNachricht = Replace(sNachricht, "Bitte hier die Tabelle einfügen... (STRG +V)", sClipBoardString) 
30.
End If 
31.
 
32.
Dim sAbsender As String 
33.
Dim Outlook As Object 
34.
Dim Nachricht As Object 
35.
 
36.
Set Outlook = CreateObject("Outlook.Application") 
37.
Set Nachricht = Outlook.CreateItem(0) 
38.
sAbsender = "Ftth-Aussendienst@telekom.de" 
39.
 
40.
'Nachricht.To sEmpfänger 
41.
Nachricht.Recipients.Add sEmpfänger 
42.
Nachricht.SentOnBehalfOfName = sAbsender 
43.
Nachricht.CC = "Ralf.Jochim@telekom.de;AEngel.telekom.de" 
44.
Nachricht.Subject = sBetreff 
45.
Nachricht.Body = sNachricht 
46.
Nachricht.ReadReceiptRequested = False 
47.
Nachricht.Display 
48.
Call Log_Meldung("Mail wurde erstellt mit dem Empfänger: " & sEmpfänger & " und dem Absender: " & sAbsender & " und dem Betreff: " & sBetreff & " und dem Nachrichtentext: " & sNachricht) 
49.
 
50.
Set Outlook = Nothing 
51.
     
52.
End Sub
nun fügt er mir zwar brav die Tabelle in Outlook ein, aber die Formatierung ist total zerschossen und die Tabellen-"Trenn"-Linien werden nicht mehr angezeigt

Weiß einer von euch ´ne Möglichkeit, das Ding wieder zu formatieren ?

Grüße
Exze
Mitglied: colinardo
03.05.2013, aktualisiert um 10:56 Uhr
Deine Mail hat wahrscheinlich Nur-Text-Format:
ändere mal
Nachricht.Body = sNachricht
in
Nachricht.HTMLBody = sNachricht
eventuell ist auch in den Zwischenablage-Einstellungen von Outlook festgelegt das standardmässig nur der Text übernommen wird und nicht die Formatierung.

Grüße Uwe
Bitte warten ..
Mitglied: 106543
03.05.2013 um 10:55 Uhr
Hi Uwe,

ja die hat nur Textformat, wenn ich allerdings HTMLBody verwende zerschießts mir die Formatierung des restlichen Texttes was auch nicht Sinn der Sache ist

Grüße
Exze
Bitte warten ..
Mitglied: colinardo
03.05.2013 um 11:28 Uhr
Habe gerade nachgelesen, das DataObject unterstützt im Moment nur Textformate d.h. Formatierungen lassen sich damit nicht übertragen.
Ich schaue mal nach Alternativen...
Bitte warten ..
Mitglied: 106543
03.05.2013 um 11:36 Uhr
Dank dir

von Hand STRG+V funktioniert ja, von daher könnte man´s mit SendKeys machen, will aber nicht mit SendKeys arbeiten -_-
Da kommen immer ganz komische Dinger raus, wenn der User n anderes Fenster in dem Moment selektiert.

Grüße
Exze
Bitte warten ..
Mitglied: colinardo
03.05.2013 um 11:36 Uhr
Du könntest den Inhalt des Ranges in HTML wandeln und dann in die Mail einfügen wie hier beschrieben:
http://www.rondebruin.nl/win/s1/outlook/bmail2.htm
Bitte warten ..
Mitglied: 106543
03.05.2013 um 11:40 Uhr
Hi Uwe,

wie schon gesagt, kann ich den HTMLBody nicht nutzen, weil sonst der restliche Text nicht mehr formatiert ist
danke für die Mühe aber ich denke ich muss einfach mit SendKeys abreiten.
Jetzt muss ich mur nur eine Möglichkeit finden, den User keine andere Application auswählen zu lassen.
Screenupdating = false klingt gut.

Danke für deine Mühe
Grüße
Exze
Bitte warten ..
Mitglied: 106543
03.05.2013 um 12:56 Uhr
so ich markier den Beitrag jetzt mal als gelöst
ich hänge auch mal den VBA-Quellcode an
zwar nicht die von mir erhoffte Lösung, aber es funktioniert
01.
Sub Mail_senden() 
02.
 
03.
sNachricht = UserForm1.TextBox_Mailtext.Text 
04.
 
05.
If sBetreff = "" Or sNachricht = "" Or sEmpfänger = "" Then 
06.
    MsgBox "Es muss ein Betreff, ein Text und ein Empfänger für die Nachricht gegeben sein." & vbCrLf & "Bitte die Ressourcen-Listen überprüfen.", , "Error" 
07.
    Call Log_Meldung("Entweder Betreff, Nachricht oder Empfänger leer. Abbruch des Mailversands.") 
08.
    Exit Sub 
09.
End If 
10.
 
11.
If UserForm1.Option_Retoure = True Then 
12.
    Dim iZelle2 As String 
13.
    For i = 2 To 40 
14.
        If Worksheets(2).Cells(i, 1) = "" Then 
15.
            i = i - 1 
16.
            Exit For 
17.
        End If 
18.
    Next 
19.
    sZelle2 = "D" & i 
20.
    ThisWorkbook.Sheets("Tabelle2").Select 
21.
    Range("A1", sZelle2).Select 
22.
    Application.Selection.Copy 
23.
    sNachricht = Replace(sNachricht, "Bitte hier die Tabelle einfügen... (STRG +V)", "") 
24.
End If 
25.
 
26.
Dim sAbsender As String 
27.
Dim Outlook As Object 
28.
Dim Nachricht As Object 
29.
Dim outlook2 As Object 
30.
 
31.
Set Outlook = CreateObject("Outlook.Application") 
32.
Set Nachricht = Outlook.CreateItem(0) 
33.
sAbsender = "Ftth-Aussendienst@telekom.de" 
34.
 
35.
'Nachricht.To sEmpfänger 
36.
Nachricht.Recipients.Add sEmpfänger 
37.
Nachricht.SentOnBehalfOfName = sAbsender 
38.
Nachricht.CC = "Ralf.Jochim@telekom.de;AEngel.telekom.de" 
39.
Nachricht.Subject = sBetreff 
40.
Nachricht.Body = sNachricht 
41.
Nachricht.ReadReceiptRequested = False 
42.
Nachricht.Display 
43.
Call Log_Meldung("Mail wurde erstellt mit dem Empfänger: " & sEmpfänger & " und dem Absender: " & sAbsender & " und dem Betreff: " & sBetreff & " und dem Nachrichtentext: " & sNachricht) 
44.
 
45.
Application.Wait (10) 
46.
 
47.
If UserForm1.Option_Retoure = True Then 
48.
    If UserForm1.Option_NurMit = True Or UserForm1.Option_GemischtMit = True Then 
49.
        Application.SendKeys ("{DOWN}") 
50.
        Application.SendKeys ("{DOWN}") 
51.
        Application.SendKeys ("{DOWN}") 
52.
        Application.SendKeys ("{DOWN}") 
53.
        Application.SendKeys ("{DOWN}") 
54.
        Application.SendKeys ("{DOWN}") 
55.
        Application.SendKeys ("{DOWN}") 
56.
        Application.SendKeys ("{DOWN}") 
57.
        Application.SendKeys ("{DOWN}") 
58.
        Application.SendKeys ("^v") 
59.
    End If 
60.
End If 
61.
 
62.
Set Outlook = Nothing 
63.
 
64.
End Sub
Bitte warten ..
Mitglied: colinardo
03.05.2013, aktualisiert um 13:24 Uhr
Noch zur Info ein Zellenbereich lässt sich auch als Bild kopieren. Dann sieht das beim Empfänger immer gleich aus.

In deinem Script in Zeile 23:
Application.Selection.CopyPicture
--edit--
nach dem aufrufen der .Display-Methode kannst du noch folgendes machen damit das Mailfenster zuverlässiger in den Vordergrund kommt:
Outlook.ActiveInspector.Activate
Application.Wait (10) => geht nicht ... Die Zeit muss im Datumsformat von Excel erfolgen z.B. so
Application.Wait Now + TimeValue("0:00:01")
Bitte warten ..
Mitglied: 76109
03.05.2013, aktualisiert 05.05.2013
Hallo Exzellius!

Hier noch was zum experimentieren...:
01.
    Dim oHtml           As PublishObject 
02.
    Dim sSheetName      As String 
03.
    Dim sSheetRange     As String 
04.
    Dim sHtmFile        As String 
05.
    Dim sHtmTitel       As String 
06.
    Dim sHtmBody        As String 
07.
    Dim sHtmText        As String 
08.
     
09.
    sSheetName = "Tabelle1"     'Tabellenname 
10.
    sSheetRange = "A1:F20"      'Tabellen-Bereich 
11.
     
12.
    sHtmTitel = "Mein Titel"    'Überschrift Fett 
13.
    sHtmText = "Mein Text"      'Text 
14.
     
15.
    sHtmFile = Environ("Temp") & "\" & sSheetName & ".htm" 
16.
     
17.
    Set oHtml = ThisWorkbook.PublishObjects.Add( _ 
18.
                             SourceType:=xlSourceRange, Filename:=sHtmFile, _ 
19.
                             Sheet:=sSheetName, Source:=sSheetRange, Title:=sHtmTitel) 
20.
     
21.
    oHtml.Publish True      'Htm-Datei erzeugen 
22.
     
23.
    sHtmBody = CreateObject("Scripting.FileSystemObject").OpenTextFile(sHtmFile).ReadAll 
24.
     
25.
    sHtmBody = Replace(sHtmBody, "<table", "<p>" & sHtmText & "</p>" & vbCrLf & "<table") 
26.
     
27.
    '..... 
28.
        '.HTMLbody = sHtmBody 
29.
    '..... 
30.
     
31.
    oHtml.Delete:   Kill sHtmFile
Gruß Dieter

[edit]
Der Vollständigkeit halber noch colinardos Anregung mit CopyPicture und GetInspector...:
01.
    Sheets("Tabelle1").Range("A5:F8").CopyPicture xlScreen, xlBitmap 
02.
 
03.
    With CreateObject("Outlook.Application").CreateItem(0) 
04.
        '...... 
05.
        .Body = sMessage 
06.
         With .GetInspector.WordEditor.Paragraphs 
07.
            .Add 
08.
            .Last.Range.Paste 
09.
         End With 
10.
         Application.CutCopyMode = False 
11.
        .Display 
12.
    End With
[/edit]
Bitte warten ..
Mitglied: 106543
10.05.2013 um 08:56 Uhr
Hi ihr beiden,

danke für die Anregungen
@colinardo: als Bild kopieren wäre nicht geeignet, weil die User selbst Daten eintragern müssen und zwar noch in der Mail, das wäre mit einem Bild nicht möglich.
@did1954: danke, werd mal schauen was ich da verwenden kann.

Grüße
Exze
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
Aus VBA E-Mail und HTML Dokument erstellen lassen (3)

Frage von Pago159 zum Thema VB for Applications ...

VB for Applications
gelöst VBA Outlook - Mail delivery system (5)

Frage von carolin.zelda zum Thema VB for Applications ...

VB for Applications
Mit Excel 2010 (VBA) eine Mail erzeugen und als Anlage einen Termin erstellen

Frage von Armin-K zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...