Excel VBA: Mehrere Zellen auswählen mit .Range

3 Antworten

Danke für eure Lösungsansätze. Die Lösung habe ich nun gefunden. mit folgendem Skript füge ich in Zelle N3 (welche ausgeblendet ist) alle E-Mail Adressen mit einem Semikolon ein:

AbZeile = 4

Spalte = "D"

Trenn = ";"

Ergebniszelle = "N1"

Zeile = AbZeile

Do Until Zeile = 999

Gesamt = Gesamt & ";" & Cells(Zeile, Spalte)

Zeile = Zeile + 1

Loop

Range(Ergebniszelle).Value = Mid(Gesamt, 2)

Somit fragt es die Spalte D ab bis zur Zelle D999, welches ich auch noch erweitern könnte. Die unnötigen ";" werden von Outlook gelöscht.

Der Rest sieht dann wie folgt aus (sorry wegen den unnötigen Kommentaren):

Quelle = ActiveWorkbook.ActiveSheet.Name
Dim outl, Mail As Object
Set outl = CreateObject("Outlook.Application")
Set Mail = outl.CreateItem(0)
Mail.Subject = Sheets(Quelle).Range("G7")
Mail.body = Sheets(Quelle).Range("G8") & vbCrLf & vbCrLf & Sheets(Quelle).Range("G9")
Mail.To = Sheets(Quelle).Range("G4")
Mail.CC = Sheets(Quelle).Range("G5")
Mail.bcc = Sheets(Quelle).Range("N1")
'& "; " & Sheets(Quelle).Range("A2") & "; " & Sheets(Quelle).Range("A3")
'Wichtigkeit Hoch (1 = normal, 0 = niedrig)
'ausgelassen: Mail.Importance = Sheets(Quelle).Range("C16")
'Standardtext
'oder: die aktive Exceldatei als Anhang mitsenden...
'Mail.Attachments.Add ThisWorkbook.FullName
'Mail anzeigen
Mail.Display
'Ein sofortiger Mail-Versand geht in Firmen wegen Sicherheitseinstellungen oft nicht:
'Mail.Send
'aber es gibt eine Lösung mit SendKeys per Windows Scripting Host (Verweis ins VB-Projekt einfügen!):
'Dim WshShell
'Set WshShell = CreateObject("WScript.Shell")
'WshShell.AppActivate Mail
'Sendet ein "Alt-S", Outlook sendet Mail sofort ohne Sicherheitsabfrage:
'WshShell.SendKeys ("")
Set Mail = Nothing
Set outl = Nothing
Set WshShell = Nothing
End Sub
Iamiam  06.01.2015, 01:13

Nun, ob eine Do Until...-Schleife oder eine For ... next -Schleife ist eigentlich egal. Und dass das Trennzeichen in Outlook der Semicolon ist, wusste ich nicht, mein Mailprogramm (Arcor) verlangt Komma.
Aber Hauptsache, Du hast jetzt eine funktionierende Lösung. Vllt solltest Du Dein VBA soweit ausbauen, dass Du einfache Strukturen verstehst?
Ich schreibe derart viele Antworten, wo die Leute keinen ausreichenden Hointergrund haben: es macht keinen Spaß, umsonst zu arbeiten!

0

Naja, ich würde sagen das er ja gar nicht weiss was er mit D4-D250 machen soll. Da es nur ein Teilstück vom Code ist, ist das schwer nachzuvollziehen.

Eventuell hilft dir da schon ein kleines .Select. Versuche mal:

Mail.bcc = Sheets(Quelle).Range("D4:D250").Select
myasker 
Fragesteller
 05.01.2015, 21:06

Hallo schmiddi1967...danke für deine Antwort! Ist ein guter Ansatz, funktioniert nicht ganz. So fügt er im Bcc Feld ein "-1" ein.

-> Habe die Lösung gefunden: siehe Kommentar unten.

0
schmiddi1967  05.01.2015, 22:26
@myasker

Super, hauptsache es hat noch geklappt. Dann ist die Antwort von Iamiam doch eher das was dir geholfen hat.

0

Hab nie Mails per µ erstellt und vllt gibts einfachere Wege, aber so sollte es funktionieren:

Du führst eine Variable C und eine AllAdr ein (musst nicht definieren als was, überlass das VBA) und füllst sie so:

AllAdr = ""
For each C in Sheets(Quelle).Range("D4:D250").Cells 'vermutlich gehts auch ohne .Cells
AllAdr = AllAdr & ", " & C.value
Next C
AllAdr = mid(AllAdr, 3, 55555) '<- eliminiert das erste , und Leerzeichen wieder

Viel Erfolg!

das fügst Du dann ins BCC-Feld ein

maximilianus7  19.12.2014, 00:43

0
Iamiam  19.12.2014, 22:09
@maximilianus7

Damit nicht unerwünschte , (Komma+Leer) drinstehen, noch eine Prüfung (und verschiedene Möglichkeiten dafür):

if C <> "" then AllAdr = AllAdr & ", " & C.value

oder

if not isempty(C) then AllAdr = AllAdr & ", " & C.value

oder

if len(C.value) > 0 then AllAdr = AllAdr & ", " & C.value

Das .value kann man sich im Prinzip sparen (ist Standardargument), ich schlepp's der Klarheit wegen aber meist mit.

0
myasker 
Fragesteller
 05.01.2015, 21:07
@Iamiam

hallo lamiam...danke für deine Antwort! Das mit deinem Ansatz oben hätte sicher funktioniert, leider bin ich etwas zu unerfahren in VBA. Habe aber die Lösung gefunden, siehe sep. Kommentar.

Vielen Dank!!

0