"gesäuberten" Outlookverteiler in xls-Liste
03.02.2017 15:13:02
Axel
ich versuche, aus einem aus Outlook kopierten Verteiler mit einigen doppelten Adressen eine einfache Mailing-Liste zu erstellen:
Aus der Zwischenablage kommt das:
Vor1, Nach1
aus dem das hier werden soll (als Excel oder csv):
Vor1.Nach1@domain.de
Vor2.Nach2@domain.de
Vor3.Nach3@domain.de
In Word schaffe ich die Zeilenumbrüche zu erzeugen und die Sortierung, dann in Excel, die E-Mail zu "extrahieren" und die Duplikate rauszunehmen, jedoch nur, indem ich die Daten per Zwischenablage manuell übernehme.
Mit 1/4-VBA-Wissen und Makro aufzeichnen und anpassen habe ich das hier schon geschafft:
In Word:
Sub linebreak_sort()
Selection.WholeStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "; "
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Sort ExcludeHeader:=False, FieldNumber:="Absätze", SortFieldType _
:=wdSortFieldAlphanumeric, SortOrder:=wdSortOrderAscending, FieldNumber2 _
:="", SortFieldType2:=wdSortFieldAlphanumeric, SortOrder2:= _
wdSortOrderAscending, FieldNumber3:="", SortFieldType3:= _
wdSortFieldAlphanumeric, SortOrder3:=wdSortOrderAscending, Separator:= _
wdSortSeparateByTabs, SortColumn:=False, CaseSensitive:=False, LanguageID _
:=wdEnglishUS, SubFieldNumber:="Absätze", SubFieldNumber2:="Absätze", _
SubFieldNumber3:="Absätze"
Selection.Copy
Selection.WholeStory
Selection.Delete Unit:=wdCharacter, Count:=1
ActiveDocument.Save
End Sub
In Excel:
Sub Unikatliste()
Dim ZeilenZahl As Long
Dim Zelle As Range
Dim intAuf As Integer
Dim intLen As Integer
Dim Str As String
Dim emailZeilenZahl As Long
ZeilenZahl = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
With ActiveSheet
.Range("A1:A" & ZeilenZahl).AdvancedFilter Action:=xlFilterCopy, _
copyToRange:=.Range("B1"), unique:=True
End With
emailZeilenZahl = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
For Each Zelle In ActiveSheet.Range("B1:B" & emailZeilenZahl)
Str = Zelle.Value
intAuf = InStr(Str, "") - intAuf
Zelle.Value = Mid(Str, intAuf, intLen)
Next Zelle
Cells.EntireColumn.AutoFit
Range("B1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
End Sub
Ergebnis ist eine sortierte Liste mit "einfachen" E-Mail-Adressen (die anstelle in einer zweiten Spalte kopiert noch netterweise in ein neues Excel-Sheet gespeichert werden könnten, was jedoch zweitrangig ist).
Mein Problem: Wie bekomme ich die Daten automatisch in Excel zur Weiterverarbeitung. Ich müsste ja aus Word heraus die Excel-Datei mit dem Makro öffnen, den Inhalt rüberkopieren und dann das Makro in Excel ausführen. Oder andersherum aus Excel die Word usw.
Das so etwas geht, meine ich, aus z.B. https://www.herber.de/forum/archiv/976to980/977151_Variablen_von_Word_nach_Excel_uebergeben.html
herauszulesen. Das übersteigt jedoch meine VBA-Fähigkeiten bei Weitem.
Hat jemand einen Tipp, wie man das gut (und für mich verständlich) verbinden kann? Oder wird das so oder so so kompliziert, wie in dem Link?
Grüße
Axel