Page 1 of 1

Kopiere eine formatierte Excel-Tabelle in eine geöffnete Outlook-Email

Posted: 22 May 2020, 10:10
by Jakobus
An die Freunde von AutoHotkey,

suche Unterstützung für ein kleineres Projekt.

Eine unterschiedlich große Excel-Tabelle (zusammen mit ihren Zell-Formaten)
soll in eine offene Outlook-Mail an die Stelle kopiert werden,
wo der Cursor gerade steht.

Vorab
Linker Bildschirm: Öffne die passende Mail in Outlook und platziere den Cursor entsprechend und
Rechter Bildschirm: Filtere in der Excel-Tabelle (in meinem Fall) nach einem Namen.

Das Ergebnis sind
10 bis 50 oder mehr Zeilen und 14 Spalten.

Über der Tabelle sind 2 freie Zeilen.
Unter der Tabelle ist eine Legende mit 6 Zeilen

Es gibt zwei Marken.
Oben links H1 (Marke 1) und
unten rechts z.B T38 (Marke 2) - kann aber auch z.B T70 sein.

Der untere Teil für Marke 2 variiert und ist je nach Filter weiter oben oder weiter unten plaziert.

Ich kopiere dann den Bereich von H2
also eine Zelle unterhalb von H1 und eine Zelle über den unteren Marker z.B T37.

Die Marken sind jeweils ein kleines x in einer grünen Zelle
damit mein Auge besser den diagonalen Bereich findet.


Mein Wunsch wäre
--
  • 1.
    Alle Zellen, die diagonal zwischen den Marken liegen,
    sollen automatisch in den Speicher kopiert werden - wichtig (!) zusammen mit dem Formaten.
    (Das geht mit STRG + C sehr gut.)
    --
    Die Schwierigkeit ist das Ausmessen zwischen den beiden Marken.
    --
  • 2.
    Mit STRG + V soll der Inhalt an die Stelle platziert werden,
    wo der Cursor in der Outlook-Mail gerade steht.
    --
  • 3.
    Optional aber nicht zwingend:
    Schön wäre es,
    wenn man über STRG + Z in Outlook eine falsch platzierte Tabelle wieder wegnehmen könnte.
    Den Cursor an die richtige Stelle bewegt
    und über das Script von AutoHotkey
    oder über STRG + V die Tabelle aus dem Speicher neu platziert.

Wenn alles gut klappt
dann wird eine neue Mail geöffnet, in der Excel-Tabelle wird ein neuer Name gefiltert
und der Vorgang von oben wird wiederholt...u.s.w.

Vorhanden sind
Excel 2016 / Outlook 2016 / Windows 10 / AutoHotKey 1.1.30.03 / SciTE4AutoHotkey

Danke für Eure Hilfe und Denkanstöße im Voraus.

Re: Kopiere eine formatierte Excel-Tabelle in eine geöffnete Outlook-Email

Posted: 22 May 2020, 13:01
by LuckyJoe
Hallo,

auch wenn ich ein großer Freund von AHK bin, bin ich doch der Meinung, dass man Anwendungen wie Excel und Outlook am besten mit "Bordmitteln" steuert, zumal beide die gleiche Sprache sprechen: VBA. In einschlägigen Foren wirst du zu deinem Vorhaben auch Lösungsansätze finden (so ist z.B. das "Auffinden" deiner "Marken" mit VBA gar kein Problem).

Ansonsten schau mal hier, ob das nicht einen Einstieg bietet:
https://autohotkey.com/board/topic/69033-basic-ahk-l-com-tutorial-for-excel/
https://autohotkey.com/board/topic/29154-ms-office-automation-functions-via-com-thanks-sean/

Re: Kopiere eine formatierte Excel-Tabelle in eine geöffnete Outlook-Email

Posted: 22 May 2020, 16:55
by Ahk_fan
Hallo,

ich habe hier mal was in VBA in Excel gemacht:

Code: Select all

     Application.DisplayAlerts = False
     Dim iFileType As Integer
     Select Case Application.Version
     Case "12.0": iFileType = 56
		Case Else: iFileType = xlWorkbookNormal
     End Select
     thema = "Antrag: "
     Application.DisplayAlerts = True
     Application.ScreenUpdating = False
     BodyText = 1
     Set outl = CreateObject("Outlook.Application")
     Set Mail = outl.CreateItem(0)
     Set itmevt.Mail = outmail
     Mail.Subject = thema
     'Mail.BodyFormat = olFormatRichText
     Mail.HTMLBody = "Hallo," & "<br>" & "<br>" & "Antrag Nr:" _
                    & "<br>" & RangetoHTML(Tabelle1.Range(Cells(2, 1), Cells(2, 4))) _
                    & RangetoHTML(Tabelle1.Range(Cells(zeile99, 1), Cells(zeile99, 4))) _
                    & "<br>" _
                    & "<br>" _
                    & RangetoHTML(Tabelle1.Range(Cells(2, 9), Cells(2, 13))) _
                    & RangetoHTML(Tabelle1.Range(Cells(zeile99, 9), Cells(zeile99, 13))) _
                    & "<br>" & "Vorgang in Zeile: " & zeile99 _
                   & "<br>" & "<br>" _
                   & "<a href=" & ThisWorkbook.Path & "\Antrag.xlsm>Link zur Übersicht</a>" _
                   & "<br>" & "<br>" & "Mit freundlichen Grüßen" & "<br>"
      Application.ScreenUpdating = True
      Mail.To = "[email protected]"
      'Mail.Attachments.Add Environ("TEMP") & "\" & "Antrag.xlsm"
      Mail.Display
      'If Mail.Sent = True Then
      '       Debug.Print "sent"
      'ElseIf Mail.Sent = False Then
      '      Debug.Print "not sent"
      'End If
1) Ein neue Email wird geöffnet
2) Betreff wird aus Variable thema ausgelesen
3) als EMail Body wird HTML gesetzt (nur so lassen sich die Daten aus Excel korrekt anzeigen)
4) aus Tabelle 1 werden versichiedene Bereiche kopiert, hier einfach anpassen...zeile99 ist bei mir eine interene Variable.
5) es wird ein Hyperlink auf eine Datei eingefügt.
6) Mail.to = Email-Empänger einfügen / mail.cc = "[email protected];[email protected]"... / mail.bc = ...
7) evtl ein Anhang, ist aber ausgeblendet
8) Mail.Display --> Email wird angezeigt --> Mail.sent würde sofort versenden ohne zu fragen
9) am Schluß gibt es noch eine Abfrage (auch ausgeblendet), ob die Mail wirklich versendet wurde, hier kann man z.B. eine Logdatei noch schreiben.

Evtl hilft es dir weiter.. ich würde es auch ohne AHK machen, ist evtl etwas einfacher und ohne Umwege.
Grüße

Re: Kopiere eine formatierte Excel-Tabelle in eine geöffnete Outlook-Email

Posted: 23 May 2020, 01:39
by BoBo
@all Bei umfangreicheren 'Aufgabenstellungen' wie einer solchen, bietet es sich mitunter an, mit "Ein (laufendes) Bild sagt mehr als tausend Worte" unterstützend tätig zu werden.
Mit :arrow: Screen2Gif lässt sich so ein ErklärBär-Video schnell erstellen, und im Thread einbetten. Da @Jakobus einen Supporter gefunden hat, welcher ihm ein VBA-Rundum-Sorglospaket schnürte, erscheint das jetzt eher sinnlos, doch es schützt vor TL:DR-Reaktionen von Supportern und motiviert vll auch solche die eher visuell unterwegs sind.

Danke fürs Zuhören
BoBo

8-)