Autor
|
Thema: VBA sendkeys vermeiden - Markirung (mehrere Zellen, Excel) in Variable (2014 mal gelesen)
|
sto.teac Mitglied CAD Designer / LV series production
Beiträge: 66 Registriert: 23.07.2010
|
erstellt am: 10. Dez. 2015 21:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich habe ein kleines Problem, welches ihr sicher in Sekunden loesen koennt Ich moechte gerne den Inhalt aus mehreren Zellen (Range) in eine Variable packen. Die Variable wird dann an anderer Stelle wieder ausgegeben (E-Mail body). Also kurz die gewuenschte Funktion skiziert: - mehrere Zellen werden markiert - Inhalt der Markierung wird in die Variable uebertragen - Inhalt aus Variable wird in eine Email ausgegeben Soweit so ... unloesbar (fuer mich :heul Mit nur einer Zelle stellt es garkein Problem dar und dazu findet man auch hunderte Beispiele im Internet. Aber mit einem Zellenverbund finde ich einfach nix. Aktuell umgehe ich das Problem, in dem ich die Range in die Zwischenablage kopiere und dann ueber sendkeys wieder in die Email einfuege. Das erscheint mir aber keine saubere Loesung Anbei meine aktuelle Umsetzung mit sendkeys:
Code: WSmail.Range(Range("StartMail"), Cells(ROWempty - 1, Range("StartMail").Column + 1)).CopySet objOutlook = CreateObject("Outlook.Application") Set objMail = objOutlook.CreateItem(0) With objMail .To = EMailAddress .Subject = Topic .Body = "" .Display End With Application.SendKeys ("^v") ' Strg-V Anweisung ist die 2.Möglichkeit statt Alt-B + I
Gerne wuerde ich hinter Body = eine entsprechend gefuellte Variable angeben und dafuer die letzte Zeile entfernen. Vielen Dank im Voraus fuer eure Unterstuetzung! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 11. Dez. 2015 00:34 <-- editieren / zitieren --> Unities abgeben: Nur für sto.teac
Hallo sto.teac, Du hast ja wieder Spezialfragen ... (und nur die halbe Erklärung) Mir ist momentan schleierhaft was Du eigentlich vorhast. Setze doch den Text vorher mit den benötigten Werten aus den Zellen zusammen und übergebe ihn dann an .body Anschließend kannst Du Dir die Mail entweder anzeigen lassen ( objMail.Display) oder gleich versenden (objMail.Send) Was mir noch aufgefallen ist, Du willst ein neues Outlook öffnen. Was machst Du denn wenn Outlook schon läuft? Sollte nicht dieses verwendet werden? Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sto.teac Mitglied CAD Designer / LV series production
Beiträge: 66 Registriert: 23.07.2010
|
erstellt am: 11. Dez. 2015 03:52 <-- editieren / zitieren --> Unities abgeben:
ui wieder zu wenig erklärt? also ich habe eine Tabelle ... dort werden in Abhängigkeit verschiedener Parameter Zelleninhalte genommen und in einem neuen Tabellenblatt zusammengetragen der umfang (Anzahl der Zellen) ist verschieden, jedoch pro Zeile immer 2 spalten diesen Bereich (von der Größe variabel) frage ich mit diesem Ausdruck ab
Code: WSmail.Range(Range("StartMail"), Cells(ROWempty - 1, Range("StartMail").Column + 1)).Copy
diesen Bereich möchte ich, so wie er ist, in die Mail einfügen ... (quasi manuell strg + c in der Tabelle und strg + v im email body) leider bekomme ich aber den Zellenverbund nicht in eine Variable geschrieben wenn ich dich richtig verstanden habe, ist deine Idee nicht den Zellenverbund in excel aufzubauen, sondern direkt in die email zu schreiben? aber dann verliert er doch das Tabellenformat, wenn ich die Inhalte einfach einzeln in die email kopiere? Ich weiß, dass ich nicht abfrage, ob schon ein outlook geöffnet ist, aber bisher war das nie ein Problem. Er hat immer das bereits geöffnete genommen. [Diese Nachricht wurde von sto.teac am 11. Dez. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fritsrol Mitglied CAD-Systemingenieur
Beiträge: 143 Registriert: 11.12.2002 Windows 10 64 Office 2013 Eplan P8 2.7 HF2 VS 2015 Medusa 2000i2
|
erstellt am: 11. Dez. 2015 07:03 <-- editieren / zitieren --> Unities abgeben: Nur für sto.teac
Hallo, hier wird eine HTML Datei aus einem Bereich generiert und als Email body verschickt. Vielleicht hilft's. Gruß Roland Sub SendInfoMsg(Empf As String, sSub As String, iAnz As Integer, Optional aDis As Boolean = True) Dim ol, mail Dim tmpBody As String Dim RngEmail As Range Dim FSObj As Scripting.FileSystemObject, TStream As Scripting.TextStream Dim strHTMLBody As String 'create the HTML file tmpBody = "C:\temp\~TempExl.htm" 'Html-Boby Set RngEmail = Range(Cells(1, 1), Cells(iAnz, 8)) 'Bereich der Verschickt werden soll 'Html erzeugen ActiveWorkbook.PublishObjects.Add(SourceType:=xlSourceRange, Filename:=tmpBody, Sheet:=RngEmail.Parent.Name, Source:=RngEmail.Address, HtmlType:=xlHtmlStatic).Publish 'Open the HTML file using the FilesystemObject into a TextStream object Set FSObj = New Scripting.FileSystemObject Set TStream = FSObj.OpenTextFile(tmpBody, ForReading) strHTMLBody = TStream.ReadAll TStream.Close FSObj.DeleteFile tmpBody, True '*** Via Outlook Set ol = CreateObject("Outlook.Application") Set mail = ol.CreateItem(0) mail.To = Empf mail.Subject = sSub mail.bodyformat = 2 ' 1=nur Text, 2 = Html, 3 Richtxt mail.HtmlBody = strHTMLBody If aDis Then mail.Display Else mail.Send End If '*** Email Template aufräumen Set mail = Nothing Set ol = Nothing Set FSObj = Nothing Set TStream = Nothing End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 11. Dez. 2015 13:50 <-- editieren / zitieren --> Unities abgeben: Nur für sto.teac
Zitat: Original erstellt von sto.teac: Ich weiß, dass ich nicht abfrage, ob schon ein outlook geöffnet ist, aber bisher war das nie ein Problem. Er hat immer das bereits geöffnete genommen.
Sorry, da habe ich mich geirrt. Bei Outlook ist das ein wenig anders da dort nur eine Instanz zulässig ist. CreateObjekt("Outlook.Application") erkennt selber wenn eine Instanz bereits läuft und verwendet dann diese. Somit kann man sich in diesem speziellen Fall das Abfragen über GetObject sparen. Im Gegensatz zu Outlook-VBA wenn man auf Excel zugreifen möchte. Ansonsten ist die Lösung über HTML-Export doch schon eine recht schöne Variante Grüße Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sto.teac Mitglied CAD Designer / LV series production
Beiträge: 66 Registriert: 23.07.2010
|
erstellt am: 11. Dez. 2015 17:22 <-- editieren / zitieren --> Unities abgeben:
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 14. Dez. 2015 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für sto.teac
Hi, im Prinzip brauchst Du ja nur die Routine übernehmen. Ich würde noch die Anzahl der Spalten in die Übergabe einbauen und damit hast Du alles erledigt. Persönlich finde ich das Gestalten in Excel nicht so optimal, würde da eher den Tabellenteil in ein Worddokument (Vorlage) übernehmen und von dort aus verschicken. Meist verwende ich aber Access, da habe ich die Reports schon vordefiniert und im Formular müssen nur die Teile zusammengestellt werden. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|