Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  VBA sendkeys vermeiden - Markirung (mehrere Zellen, Excel) in Variable

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  VBA sendkeys vermeiden - Markirung (mehrere Zellen, Excel) in Variable (2014 mal gelesen)
sto.teac
Mitglied
CAD Designer / LV series production


Sehen Sie sich das Profil von sto.teac an!   Senden Sie eine Private Message an sto.teac  Schreiben Sie einen Gästebucheintrag für sto.teac

Beiträge: 66
Registriert: 23.07.2010

erstellt am: 10. Dez. 2015 21:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)).Copy

Set 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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

Office 2010; Office365
Visual Basic

erstellt am: 11. Dez. 2015 00:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für sto.teac 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von sto.teac an!   Senden Sie eine Private Message an sto.teac  Schreiben Sie einen Gästebucheintrag für sto.teac

Beiträge: 66
Registriert: 23.07.2010

erstellt am: 11. Dez. 2015 03:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von fritsrol an!   Senden Sie eine Private Message an fritsrol  Schreiben Sie einen Gästebucheintrag für fritsrol

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für sto.teac 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

Office 2010; Office365
Visual Basic

erstellt am: 11. Dez. 2015 13:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für sto.teac 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von sto.teac an!   Senden Sie eine Private Message an sto.teac  Schreiben Sie einen Gästebucheintrag für sto.teac

Beiträge: 66
Registriert: 23.07.2010

erstellt am: 11. Dez. 2015 17:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

danke euch Beiden.
Ich werde mir den Code nachher mal genauer ansehen und schauen, ob ich das auf meine Daten angewandt bekomme 

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

Office 2010; Office365
Visual Basic

erstellt am: 14. Dez. 2015 10:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für sto.teac 10 Unities + Antwort hilfreich

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz