Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Selection Email Body mit Adress-Query
15.11.2021 16:14:39
Daniel
Liebes Forum,
eine neuer Use-Case, eine neue Frage in die Expertenrunde. Folgendes: In einer Liste werden Reha-Patienten für die Koordination psychologischer Test erfasst. Es gibt jede Menge Filter, um geeignete Gruppen für die Untersuchungen zu bilden. Um die Termine allen Mitarbeitern (Spalte G) mitzuteilen, sollen dynamisch selektierte Tabellenbereiche per Knopfdruck als Email Body via Outlook versendet werden können und deren Email-Adressen automatisch einfließen. Den ersten Schritt habe ich bereits mit einem - soweit ich das beurteilen kann - recht verbreitetem Script von Ron de Bruin lösen können; den zweiten noch nicht. Die Mitarbeiter werden via Dropdown in Spalte G zugeordnet, die als Quelle in einem Bibliotheks-Sheet eingepflegt sind. Es wäre kein Thema, deren dienstliche Email Adressen in einer zusätzlichen Spalte im Bibliotheks-Sheet neben den Namen zu ergänzen. Hier die verschlankte Datei zur Veranschaulichung: https://www.herber.de/bbs/user/149157.xlsm
Ich freue mich wie immer auf Lösungsvorschläge und Ideen.
Daniel Jäger

Sub CommandButton1_Click()
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Set rng = Nothing
On Error Resume Next
'Only the visible cells in the selection
Set rng = Selection.SpecialCells(xlCellTypeVisible)
'You can also use a fixed range if you want
'Set rng = Sheets("YourSheet").Range("D4:D12").SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "The selection is not a range or the sheet is protected" & _
vbNewLine & "please correct and try again.", vbOKOnly
Exit Sub
End If
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = ""
.CC = ""
.BCC = ""
.Subject = "Information: Testgruppe gebildet"
.HTMLBody = RangetoHTML(rng)
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
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"
'Copy the range and create a new workbook to past the data in
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 Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
'Publish the sheet to a htm file
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
'Read all data from the htm file into RangetoHTML
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=")
'Close TempWB
TempWB.Close savechanges:=False
'Delete the htm file we used in this function
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Selection Email Body mit Adress-Query
15.11.2021 21:37:06
Yal
Hallo Daniel,
Sehr gut erklärt, aber was ist das gewünschte Ergebnis? Es ist mir unklar.
VG
Yal
AW: Selection Email Body mit Adress-Query
15.11.2021 22:38:51
Daniel
Guten Abend Yal,
die Testleiter, die die ganzen psychologischen Tests in unserem Auftrag mit den Patienten durchführen, bilden anhand der Liste Gruppen (via Filter). Am Ende stehen 6 - 8 Patientennamen untereinander, die bei unterschiedlichen Ausbildern (Spalte G) eingeteilt sind. Diese müssen informiert werden.
Ziel: Die Testleiter markieren die gefilterte Testgruppe inkl. Spalte G (bspw. alle, die IST, D-PA und d2 aus Team Ja/Die + Jä/Fl machen sollen) und können den Bereich per Knopfdruck als Email (Body, nicht Attachment) an die DIenstadressen der darin enthaltenen Ausbilder senden. Die Testleiter müssen das Adressfeld nicht mühsam per Hand füllen. Momentan sind die Dienstadressen der Ausbilder noch nicht im Sheet "Bibliothek" (nur die Namen) angelegt, was aber nur eine Fleißarbeit wäre. Jetzt verständlicher?
Liebe Grüße
Daniel Jäger
Anzeige
AW: Selection Email Body mit Adress-Query
16.11.2021 08:13:30
Yal
Hallo Daniel,
Ich werde heute keine Zeit haben. Ich setze den Zeichen "noch offen" an, um anderen Helfer zu rufen.
Es ist eigentlich kein komplizierte Sache, Du brauchst vielleicht nur eine Starthilfe.
VG
Yal
AW: Selection Email Body mit Adress-Query
16.11.2021 10:14:24
peterk
Hallo
Nachdem alle Filter gesetzt wurden, wird der Bildschirminhalt an alle Ausbilder geschickt. Annahme: Die Emailadresse steht in Spalte R in "Bibliothek"

Sub CommandButton1_Click()
'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm
'Don't forget to copy the function RangetoHTML in the module.
'Working in Excel 2000-2016
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim LastRow As Long
Dim i As Long, j As Long
Dim emailList As String
Set rng = Nothing
On Error Resume Next
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
'Only the visible cells after filter
With Worksheets("Testbedarf BvB")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = .Range("A1:AB" & LastRow).SpecialCells(xlCellTypeVisible)
' Copy names to temporary column "BB" and remove duplicates
.Range("G5:G" & LastRow).SpecialCells(xlCellTypeVisible).Copy
.Range("BB1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Range("$BB$1:$BB$" & LastRow).RemoveDuplicates Columns:=1, Header:=xlNo
'create email addresses presume they can be found in column "R"
emailList = ""
LastRow = .Cells(.Rows.Count, "BB").End(xlUp).Row
For i = 1 To LastRow
For j = 4 To 1000
If Worksheets("Bibliothek").Range("O" & j).Value = "" Then Exit For
If Worksheets("Bibliothek").Range("O" & j).Value = .Range("BB" & i).Value Then
emailList = emailList & Worksheets("Bibliothek").Range("R" & j).Value & ";"
Exit For
End If
Next j
Next
'clear the temporary column
.Range("BB:BB").ClearContents
.Range("A1").Activate
End With
On Error GoTo 0
If rng Is Nothing Then
MsgBox "The selection is not a range or the sheet is protected" & _
vbNewLine & "please correct and try again.", vbOKOnly
Exit Sub
End If
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'On Error Resume Next
With OutMail
.to = emailList
.CC = ""
.BCC = ""
.Subject = "Information: Testgruppe gebildet"
.HTMLBody = RangetoHTML(rng)
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Peter
Anzeige
AW: Selection Email Body mit Adress-Query
16.11.2021 11:19:44
Daniel
Hi Peter,
erstmal vielen Dank für Deine Mühe. Ich verstehe es soweit, dass Du temporär eine Hilfsspalte für die sichtbar gefilterten Werte der Ausbilder-Namen anlegst und diese mit den Angaben aus R abgleichst, oder? Dein neuer Code läuft fehlerlos durch, wenngleich die Adressen aus Spalte R (passend zu den Mitarbeitern in Spalte K) leider nicht einlaufen. Ohne Fehlermeldung ist die Fehlersuche schwierig ...
Liebe Grüße
Daniel Jäger
AW: Selection Email Body mit Adress-Query
16.11.2021 11:27:54
Daniel
Stopp: Kommando zurück! Es laufen Email-Adressen ein, aber unvollständig. Wenn man Filter auflegt, fehlen Adressen bzw. sind nicht passend zum gewählten Datensatz. Selbst wenn man nichts auswählt und die gesamte Tabelle als Email erzeugt wird (müssten ja alle Adressen einlaufen), stehen nur eine handvoll drin. Habe die Datei mit Email-Sparte mal hochgeladen: https://www.herber.de/bbs/user/149169.xlsm
Vielleicht erkennst Du den Fehler schneller als ich ...
LG Daniel Jäger
Anzeige
AW: Selection Email Body mit Adress-Query
16.11.2021 12:03:04
peterk
Hallo
Ich durchsuche die Spalte "O" nach den Namen/Email Adressen.

For j = 4 To 1000
If Worksheets("Bibliothek").Range("O" & j).Value = "" Then Exit For
If Worksheets("Bibliothek").Range("O" & j).Value = .Range("BB" & i).Value Then
emailList = emailList & Worksheets("Bibliothek").Range("R" & j).Value & ";"
Exit For
End If
Next j
Müsstest Du ändern auf
For j = 4 To 1000
If Worksheets("Bibliothek").Range("K" & j).Value = "" Then Exit For
If Worksheets("Bibliothek").Range("K" & j).Value = .Range("BB" & i).Value Then
emailList = emailList & Worksheets("Bibliothek").Range("R" & j).Value & ";"
Exit For
End If
Next j
Peter
Anzeige
AW: Selection Email Body mit Adress-Query
16.11.2021 12:42:22
Daniel
Hi Peter,
habe Deinen Vorschlag mit dem selektiert/markierten Tabellenbereich kombiniert - und jetzt läuft es - fast :-) Es scheint so, als ob er maximal 5 Adressen einfügt und alle anderen Treffer abschneidet ... vielleicht ist das Hilfs-"Array" zu klein? Bei Filterergebnissen kleiner gleich 5 Emails (Dopplungen werden ja ausfindig gemacht) läuft es super.
LG Daniel Jäger
AW: Selection Email Body mit Adress-Query
16.11.2021 14:31:20
Daniel
.. selbes Phänomen: setze mal Filter Jä/Di + A (in Spalte F) ... es fehlen die Kollegen Borrmann, Wedhorn, Posilovic ... nach 5 Transfers ist Schluss, merkwürdig oder?
LG Daniel Jäger
Anzeige
AW: Selection Email Body mit Adress-Query
16.11.2021 15:01:38
peterk
Hallo
Es hängt mit dem Filter zusammen, sprich augeblendete Zeile werden nicht berücksichtigt. Hab meine temporäre Spalte nun in "Bibliothek" Spalte Z verlegt (hier gibt es keine Filter) und nun sollte es einwandfrei funktionieren.
https://www.herber.de/bbs/user/149178.xlsm
Peter
AW: Selection Email Body mit Adress-Query
16.11.2021 17:48:12
Daniel
Dickes Danke, läuft jetzt perfekt :-)
1000 Dank mal wieder! Super Gemeinschaft hier ...
AW: Selection Email Body mit Adress-Query
18.11.2021 13:03:46
Daniel
Hallo zusammen,
ich bin es nochmal. Aus irgendeinem Grund nimmt er die Duplikate doch nicht aus der temporären Spalte "Z" heraus. Habe das mit F8 mal nachgestellt. Zudem müsste bei 0 gesetzten Filtern (also alle Einträge sind sichtbar) keine 104 EMail Adressen einfließen, sondern maximal 31 ...
Haben wir etwas übersehen?

Sub CommandButton1_Click()
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim LastRow As Long
Dim i As Long, j As Long
Dim emailList As String
Dim foundEmails As Long
Set rng = Nothing
On Error Resume Next
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
'Only the visible cells after filter
With Worksheets("Testbedarf BvB")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = .Range("A5:G" & LastRow).SpecialCells(xlCellTypeVisible)
' Copy names to temporary column "Z" in sheet "Bibliothek" and remove duplicates
.Range("G5:G" & LastRow).SpecialCells(xlCellTypeVisible).Copy
End With
With Worksheets("Bibliothek")
.Range("Z1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
.Range("$Z1:Z" & LastRow).SpecialCells(xlCellTypeConstants).RemoveDuplicates Columns:=1, Header:=xlNo
'create email addresses presume they can be found in column "R"
emailList = ""
foundEmails = 0
LastRow = .Cells(.Rows.Count, "Z").End(xlUp).Row
For i = 1 To LastRow
Debug.Print i, .Range("Z" & i)
For j = 4 To 1000
If .Range("K" & j).Value = "" Then Exit For
If .Range("K" & j).Value = .Range("Z" & i).Value Then
emailList = emailList & .Range("M" & j).Value & ";"
foundEmails = foundEmails + 1
Exit For
End If
Next j
Next
MsgBox (LastRow & " Ausbilder Einträge gefunden" & vbCrLf & _
foundEmails & " hinterlegte Emails gefunden" & vbNewLine & _
Replace(emailList, ";", vbCrLf))
'clear the temporary column
.Range("Z:Z").ClearContents
End With
On Error GoTo 0
If rng Is Nothing Then
MsgBox "The selection is not a range or the sheet is protected" & _
vbNewLine & "please correct and try again.", vbOKOnly
Exit Sub
End If
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'On Error Resume Next
With OutMail
.To = emailList
.CC = ""
.BCC = ""
.Subject = "Information: Testgruppe gebildet"
.HTMLBody = RangetoHTML(rng)
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
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 Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
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

Anzeige
AW: Selection Email Body mit Adress-Query
18.11.2021 13:04:14
Daniel
Hallo zusammen,
ich bin es nochmal. Aus irgendeinem Grund nimmt er die Duplikate doch nicht aus der temporären Spalte "Z" heraus. Habe das mit F8 mal nachgestellt. Zudem müsste bei 0 gesetzten Filtern (also alle Einträge sind sichtbar) keine 104 EMail Adressen einfließen, sondern maximal 31 ...
Haben wir etwas übersehen?

Sub CommandButton1_Click()
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim LastRow As Long
Dim i As Long, j As Long
Dim emailList As String
Dim foundEmails As Long
Set rng = Nothing
On Error Resume Next
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
'Only the visible cells after filter
With Worksheets("Testbedarf BvB")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = .Range("A5:G" & LastRow).SpecialCells(xlCellTypeVisible)
' Copy names to temporary column "Z" in sheet "Bibliothek" and remove duplicates
.Range("G5:G" & LastRow).SpecialCells(xlCellTypeVisible).Copy
End With
With Worksheets("Bibliothek")
.Range("Z1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
.Range("$Z1:Z" & LastRow).SpecialCells(xlCellTypeConstants).RemoveDuplicates Columns:=1, Header:=xlNo
'create email addresses presume they can be found in column "R"
emailList = ""
foundEmails = 0
LastRow = .Cells(.Rows.Count, "Z").End(xlUp).Row
For i = 1 To LastRow
Debug.Print i, .Range("Z" & i)
For j = 4 To 1000
If .Range("K" & j).Value = "" Then Exit For
If .Range("K" & j).Value = .Range("Z" & i).Value Then
emailList = emailList & .Range("M" & j).Value & ";"
foundEmails = foundEmails + 1
Exit For
End If
Next j
Next
MsgBox (LastRow & " Ausbilder Einträge gefunden" & vbCrLf & _
foundEmails & " hinterlegte Emails gefunden" & vbNewLine & _
Replace(emailList, ";", vbCrLf))
'clear the temporary column
.Range("Z:Z").ClearContents
End With
On Error GoTo 0
If rng Is Nothing Then
MsgBox "The selection is not a range or the sheet is protected" & _
vbNewLine & "please correct and try again.", vbOKOnly
Exit Sub
End If
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'On Error Resume Next
With OutMail
.To = emailList
.CC = ""
.BCC = ""
.Subject = "Information: Testgruppe gebildet"
.HTMLBody = RangetoHTML(rng)
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
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 Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
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

Anzeige
AW: Selection Email Body mit Adress-Query
18.11.2021 13:05:04
Daniel
Hallo zusammen,
ich bin es nochmal. Aus irgendeinem Grund nimmt er die Duplikate doch nicht aus der temporären Spalte "Z" heraus. Habe das mit F8 mal nachgestellt. Zudem müsste bei 0 gesetzten Filtern (also alle Einträge sind sichtbar) keine 104 EMail Adressen einfließen, sondern maximal 31 ...
Haben wir etwas übersehen?

Sub CommandButton1_Click()
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim LastRow As Long
Dim i As Long, j As Long
Dim emailList As String
Dim foundEmails As Long
Set rng = Nothing
On Error Resume Next
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
'Only the visible cells after filter
With Worksheets("Testbedarf BvB")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = .Range("A5:G" & LastRow).SpecialCells(xlCellTypeVisible)
' Copy names to temporary column "Z" in sheet "Bibliothek" and remove duplicates
.Range("G5:G" & LastRow).SpecialCells(xlCellTypeVisible).Copy
End With
With Worksheets("Bibliothek")
.Range("Z1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
.Range("$Z1:Z" & LastRow).SpecialCells(xlCellTypeConstants).RemoveDuplicates Columns:=1, Header:=xlNo
'create email addresses presume they can be found in column "M"
emailList = ""
foundEmails = 0
LastRow = .Cells(.Rows.Count, "Z").End(xlUp).Row
For i = 1 To LastRow
Debug.Print i, .Range("Z" & i)
For j = 4 To 1000
If .Range("K" & j).Value = "" Then Exit For
If .Range("K" & j).Value = .Range("Z" & i).Value Then
emailList = emailList & .Range("M" & j).Value & ";"
foundEmails = foundEmails + 1
Exit For
End If
Next j
Next
MsgBox (LastRow & " Ausbilder Einträge gefunden" & vbCrLf & _
foundEmails & " hinterlegte Emails gefunden" & vbNewLine & _
Replace(emailList, ";", vbCrLf))
'clear the temporary column
.Range("Z:Z").ClearContents
End With
On Error GoTo 0
If rng Is Nothing Then
MsgBox "The selection is not a range or the sheet is protected" & _
vbNewLine & "please correct and try again.", vbOKOnly
Exit Sub
End If
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'On Error Resume Next
With OutMail
.To = emailList
.CC = ""
.BCC = ""
.Subject = "Information: Testgruppe gebildet"
.HTMLBody = RangetoHTML(rng)
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
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 Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
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

Anzeige
AW: Selection Email Body mit Adress-Query
18.11.2021 13:05:18
Daniel
Hallo zusammen,
ich bin es nochmal. Aus irgendeinem Grund nimmt er die Duplikate doch nicht aus der temporären Spalte "Z" heraus. Habe das mit F8 mal nachgestellt. Zudem müsste bei 0 gesetzten Filtern (also alle Einträge sind sichtbar) keine 104 EMail Adressen einfließen, sondern maximal 31 ...
Haben wir etwas übersehen?

Sub CommandButton1_Click()
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim LastRow As Long
Dim i As Long, j As Long
Dim emailList As String
Dim foundEmails As Long
Set rng = Nothing
On Error Resume Next
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
'Only the visible cells after filter
With Worksheets("Testbedarf BvB")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = .Range("A5:G" & LastRow).SpecialCells(xlCellTypeVisible)
' Copy names to temporary column "Z" in sheet "Bibliothek" and remove duplicates
.Range("G5:G" & LastRow).SpecialCells(xlCellTypeVisible).Copy
End With
With Worksheets("Bibliothek")
.Range("Z1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
.Range("$Z1:Z" & LastRow).SpecialCells(xlCellTypeConstants).RemoveDuplicates Columns:=1, Header:=xlNo
'create email addresses presume they can be found in column "M"
emailList = ""
foundEmails = 0
LastRow = .Cells(.Rows.Count, "Z").End(xlUp).Row
For i = 1 To LastRow
Debug.Print i, .Range("Z" & i)
For j = 4 To 1000
If .Range("K" & j).Value = "" Then Exit For
If .Range("K" & j).Value = .Range("Z" & i).Value Then
emailList = emailList & .Range("M" & j).Value & ";"
foundEmails = foundEmails + 1
Exit For
End If
Next j
Next
MsgBox (LastRow & " Ausbilder Einträge gefunden" & vbCrLf & _
foundEmails & " hinterlegte Emails gefunden" & vbNewLine & _
Replace(emailList, ";", vbCrLf))
'clear the temporary column
.Range("Z:Z").ClearContents
End With
On Error GoTo 0
If rng Is Nothing Then
MsgBox "The selection is not a range or the sheet is protected" & _
vbNewLine & "please correct and try again.", vbOKOnly
Exit Sub
End If
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'On Error Resume Next
With OutMail
.To = emailList
.CC = ""
.BCC = ""
.Subject = "Information: Testgruppe gebildet"
.HTMLBody = RangetoHTML(rng)
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
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 Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
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

Anzeige
AW: Selection Email Body mit Adress-Query
18.11.2021 13:53:24
peterk
Hallo
Uups, Fehler von mir (wollte etwas ausprobieren, hat aber nicht funktioniert bei gefilterten Listen)

Ersetze
.Range("$Z1:Z" & LastRow).SpecialCells(xlCellTypeConstants).RemoveDuplicates Columns:=1, Header:=xlNo
durch
.Range("$Z1:Z" & LastRow).RemoveDuplicates Columns:=1, Header:=xlNo
Peter
AW: Selection Email Body mit Adress-Query
19.11.2021 11:44:48
Daniel
Danke Peter, jetzt geht alles so wie es sein soll. Könnte man die Msg Box noch mit einer YesNoCancel Abfrage kombinieren, um den Vorgang besser steuern zu können? Mein erster Versuch scheitert leider ... es kommt nur eine merkwürdige Zahl ...
LG Daniel Jäger

Sub CommandButton3_Click()
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Dim LastRow As Long
Dim i As Long, j As Long
Dim emailList As String
Dim foundEmails As Long
Set rng = Nothing
On Error Resume Next
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
'Only the visible cells after filter
With Worksheets("Testbedarf bez. SchüPra")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = .Range("A5:I" & LastRow).SpecialCells(xlCellTypeVisible)
' Copy names to temporary column "Z" in sheet "Bibliothek" and remove duplicates
.Range("F5:F" & LastRow).SpecialCells(xlCellTypeVisible).Copy
End With
With Worksheets("Bibliothek")
.Range("Z1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
.Range("$Z1:Z" & LastRow).RemoveDuplicates Columns:=1, Header:=xlNo
'create email addresses presume they can be found in column "S"
emailList = ""
foundEmails = 0
LastRow = .Cells(.Rows.Count, "Z").End(xlUp).Row
For i = 1 To LastRow
Debug.Print i, .Range("Z" & i)
For j = 4 To 1000
If .Range("Q" & j).Value = "" Then Exit For
If .Range("Q" & j).Value = .Range("Z" & i).Value Then
emailList = emailList & .Range("S" & j).Value & ";"
foundEmails = foundEmails + 1
Exit For
End If
Next j
Next
If MsgBox("Aktuelle Testgruppe als Email exportieren?" & vbCrLf & vbNewLine & _
foundEmails & " Ausbilder(innen) stehen im Verteiler:" & vbCrLf & vbNewLine & _
Replace(emailList, ";", vbCrLf) & vbYesNoCancel) = vbYes Then
'clear the temporary column
.Range("Z:Z").ClearContents
Else: Exit Sub
End If
End With
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Auswahl ungültig." & _
vbNewLine & "Bitte erneut versuchen bzw. Blattschutz entfernen.", vbOKOnly
Exit Sub
End If
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'On Error Resume Next
With OutMail
.To = emailList
.CC = ""
.BCC = ""
.Subject = "Information: Testgruppe gebildet"
.HTMLBody = RangetoHTML(rng)
.Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub

AW: Selection Email Body mit Adress-Query
19.11.2021 12:01:16
peterk
Hallo
Ersetzte

If MsgBox("Aktuelle Testgruppe als Email exportieren?" & vbCrLf & vbNewLine & _
foundEmails & " Ausbilder(innen) stehen im Verteiler:" & vbCrLf & vbNewLine & _
Replace(emailList, ";", vbCrLf) & vbYesNoCancel) = vbYes Then
'clear the temporary column
.Range("Z:Z").ClearContents
Else: Exit Sub
End If
Durch

'clear the temporary column
.Range("Z:Z").ClearContents
If MsgBox("Aktuelle Testgruppe als Email exportieren?" & vbCrLf & vbNewLine & _
foundEmails & " Ausbilder(innen) stehen im Verteiler:" & vbCrLf & vbNewLine & _
Replace(emailList, ";", vbCrLf), vbYesNo + vbQuestion) = vbYes Then
Else
Exit Sub
End If
Peter
AW: Selection Email Body mit Adress-Query
19.11.2021 13:22:47
Daniel
Danke! Jetzt passt es ... mit "Clear Z" oben drüber ... hätte ich ja auch selber drauf kommen können ..
LG Daniel Jäger
AW: Selection Email Body mit Adress-Query
19.11.2021 13:59:35
Daniel
... ach Mist, wenn man die Arbeitsmappe freigibt, funktioniert die Email-Abfrage nicht mehr. Wahrscheinlich kann er die Hilfsspalte Z nicht anlegen, oder? Das ist ja ärgerlich, zumal die Funktion jetzt so weit gediehen ist. Was kann man dagegen machen? Die Liste wird von 20 Leuten genutzt und auch gleichzeitig ...
LG Grüße
Daniel Jäger
AW: Selection Email Body mit Adress-Query
19.11.2021 16:09:31
peterk
Hallo
Hast Du "Bibliothek" in irgendeiner Form geschützt / versteckt? Kommt eine Fehlermeldung?
Peter
AW: Selection Email Body mit Adress-Query
22.11.2021 08:31:40
Daniel
Guten Morgen Peter,
die "Bibliothek" ist weder ausgeblendet noch geschützt. Eine Fehlermeldung kommt nicht. Die Email mit den sichtbaren Zeilen wird erzeugt, aber die Duplikate der Adressen werden im Multi-User nicht mehr entfernt. Wenn man den ganzen Datensatz ohne Filter übernimmt, friert Excel ein. Hier die Datei zum Testen:
https://www.herber.de/bbs/user/149291.xlsm
Liebe Grüße
Daniel Jäger
AW: Selection Email Body mit Adress-Query
23.11.2021 08:59:52
Daniel
Guten Morgen zusammen,
hat jemand von den Excel-Veteranen hierzu vielleicht eine Lösung?
Freundliche Grüße
Daniel Jäger

52 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige