Excelliste durchlaufen und Werte ausgeben für Mail

Hallo zusammen,

folgende Sache möchte ich gerne machen und benötige Hilfe:

Ich Habe eine Excel-Liste, die ausgefüllt werden soll (unterschieldich; mal 5 Zeilen, mal 10 Zeilen…). Ich möchte nicht jede einzelne Zeile mit IF ansprechen, sondern gerne die Liste von oben nach unten durchlaufen und jeweils schauen, ob in der Zeile ein Wert steht und wenn ja, sollen die Daten dieser Zeile einer Variable übergeben werden.

Diese Variable soll den Body einer E-Mail füllen (da klappt soweit schon). Daher sollen immer nur die Werte ausgelesen werden, die benötigt werden und das so keine unnötigen Leerzeilen in der Mail entstehen.

Weiß jemand, wie solch ein makro zum Auslesen aussehen könnte?

Vielen lieben Dank.

Christian

Hallo Christian

dim i as integer, s() as string
redim s(0)
for i = 1 to activesheet.usedrange.rows.count
if not activesheet.cells(i,1).value ="" then
redim preserve s(ubound(s())+1)
s(ubound(s()))=activesheet.cells(i,1).value
end if
next

gruss

Andreas

Hallo Andreas,

danke für deine Antwort. Wie soll das genau funktionieren (wofür steht in dem Makro was)?

Besten Dank vorab.

Viele Grüße
Christian

Nachfragen
hallo Christian,

Ich Habe eine Excel-Liste, die ausgefüllt werden soll
(unterschieldich; mal 5 Zeilen, mal 10 Zeilen…). Ich möchte
nicht jede einzelne Zeile mit IF ansprechen, sondern gerne die
Liste von oben nach unten durchlaufen und jeweils schauen, ob
in der Zeile ein Wert steht und wenn ja, sollen die Daten
dieser Zeile einer Variable übergeben werden.

handelt es sich um eine einspaltige Liste oder um eine mehrspaltige?
Also langt es A abzuprüfen oder muß man alle Spalten prüfen?

Ohne evtl. Specialcells oder Benutzung des Spezialfilters durch Vba kommste irgendwie nicht um Einzelzellprüfung.

Diese Variable soll den Body einer E-Mail füllen (da klappt
soweit schon).

Zeige mal da den Code, vielleicht kann man das ja gleich integrieren, oder als Call makro oder als Funktion integrieren.

Weiß jemand, wie solch ein makro zum Auslesen aussehen könnte?

Ja, aber es gibt nicht DAS makro zum Auslesen, noch fehlen mir da paar Rahmenbedingungen die man wissen muß.

Und der gepostete Code hat Schwächen, eine ist, wenn Zeile 1 oder 2 auch noch, so rechnet er falsch.

Ansonsten, was ist dir da unklar? Die Arrayvariable s() wird mit den Werten die ungleich Leer sind befüllt.

Danach hat s() vielleicht 10 Elemente, die kann man dann auslesen mit S(0) bis s(9)

so z.B.

for N= 0 to ubound(s)
Satz=Satz & s(N) & Chr(10)
next N

Anschließend fügst du „Satz“ in deinen Emailbody ein.

Gruß
Reinhard

Hallo Christian

Deine Anforderung ist das Füllen von einem Parameter / Variablen. Die ist in dem Beispiel S() als vektor. S(1-n) beinhaltet die Werte der nicht leeren Zellen im aktiven sheet. Die kannst du nun weiter für deine E-mail applikation verwenden.

dim i as integer, s() as string
redim s(0)
for i = 1 to activesheet.usedrange.rows.count ’ benutzter Bereich absuchen in der ersten Spalte
if not activesheet.cells(i,1).value ="" then’ prüfen ob die Zelle leer ist. (Halt mit if)
redim preserve s(ubound(s())+1)'vektor um 1 erweitern
s(ubound(s()))=activesheet.cells(i,1).value’parameter füllen
end if
next

gruss

Andreas

Hallo Reinhard,

danke das du dir schon einmal Gedanken gemacht hast.

Meine Liste ist simpel aufgebaut, die Zellen A1 bis C1 enthalten die Spaltenüberschrift, die Zellen A2 bis C50 werden individuell gefüllt.

Vielen Dank.

Gruß
Christian

Hier mein Code der E-Mail:

Sub eMail()

Dim ol, mail As Object
Set ol = CreateObject(„Outlook.Application“)
Set mail = ol.CreateItem(0)

Text = „***Hier soll über meine Variable von dem Auslese-Makro der Text der ausgelesenen Liste stammen***“

With mail
.Subject = „TEST“
.To = „“
.CC = „“
.BCC = „“
.HTMLBody = Text
.Importance = 2
.ReadReceiptRequested = True
.Display
End With

End Sub

Meine Liste ist simpel aufgebaut, die Zellen A1 bis C1
enthalten die Spaltenüberschrift, die Zellen A2 bis C50 werden
individuell gefüllt.

hallo Christian,

diese Nachfrage ist noch offen:

Also langt es A abzuprüfen oder muß man alle Spalten prüfen?

Gruß
Reinhard

Sobald ein Wert in C steht, soll die ganze Zeile (auch wenn beispielsweise in B nichts steht), ausgelesen werden.

Vielen lieben Dank vorab.

Gruß
Christian

Sobald ein Wert in C steht, soll die ganze Zeile (auch wenn
beispielsweise in B nichts steht), ausgelesen werden.

Hallo Christian,

okay, lassen wir das erstmal, kann man später noch einbauen.

Wie wäre es mit dem nachfolgenden Code? Ramses hat da was gebastlt.
Im Beispiel wird zwar nur A1:A5 in die Email eingefügt, aber das kann man ja ändern, also spielts erstmal keine Rolle.
Wichtiger ist daß der Code das macht was du willst.

Quelle (die lohnt sich zu bookmarken):
http://www.office.gmxhome.de/_excel_outlook.htm#EXCE…

Gruß
Reinhard

Sub Excel\_Range\_via\_Outlook\_Senden()
 Dim OutApp As Object, Mail As Object, i
 Dim Nachricht
 'Verweis auf "Microsoft Forms 2.0 Object Library" aktivieren !!
 'sonst geht es nicht
 'Dataobject wird gebraucht wegen der Zwischenablage
 Dim ClpObj As DataObject
 For i = 1 To 10
 Set ClpObj = New DataObject
 Set OutApp = CreateObject("Outlook.Application")
 Set Nachricht = OutApp.CreateItem(0)
 'Excelbereich der versendet werden soll.
'Wenn kein Bereich versendet werden soll sondern
'der Bereich bereits kopiert wurde, können sie die
'nächsten beiden Zeilen auskommentieren
 Range("A1:A5").Select
 'Bereich wird in die Zwischenablage kopiert
 Selection.copy
 With Nachricht
 .Subject = "Betreffzeile Header"
 'Zwischenablage wird eingefügt
 ClpObj.GetFromClipboard
 .Body = ClpObj.GetText(1)
 .To = "[email protected]"
 'Hier wird die Mail angezeigt
 '.Display
 'Hier wird die Mail gleich in den Postausgang gelegt
 .Send
 End With
 Set OutApp = Nothing
 Set Nachricht = Nothing
 'Auf Outlook warten. Ist nicht schnell genug :smile:)
 Application.Wait (Now + TimeValue("0:00:05"))
 Next i
End Sub

Hallo Andreas,

danke für deine Hilfe!

Liebe Grüße
Christian

Hallo Reinhard,

danke für deine Hilfe!

Liebe Grüße
Christian