Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1088to1092
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
Inhaltsverzeichnis

Ermittlung für For iCounter = 1 to x

Ermittlung für For iCounter = 1 to x
F.
Hallo
Wie kann ich automatisch die benötigte Anzahl für "to x" ermitteln, wenn die Anzahl Datensätze ständig variert?
Gruss
Frédéric
AW: Ermittlung für For iCounter = 1 to x
27.07.2009 16:24:12
Hajo_Zi
Halo Frederic,
ernmittle die Anzahl der Datensätze. Für eine Spalte oder den benutzten Bereich.
Suche mal nach Loletzte

letzte Zeile in einer Spalte
27.07.2009 16:25:54
Erich
Hi Frédéric ,
wenn die Schleife z. B. bis zur letzten in Spalte D belegten Zeile laufen soll:

Option Explicit
Sub tst()
Dim lngL As Long, ii As Long
With Sheets("Tabelle1")
lngL = .Cells(.Rows.Count, 4).End(xlUp).Row ' letzte in Sp.4 (D) belegte Zeile
For ii = 1 To lngL
' ... dein Code
Next ii
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Ermittlung für For iCounter = 1 to x
28.07.2009 11:53:17
F.
Hallo
Danke für die Antworten.
Entweder verstehe ich einfach noch zu wenig oder habe die Frage unklar formuliert. :)
Mein Code für einen Mailversand sieht derzeit so aus:
Sub ()
Dim olApp As Object
Dim wsShell
Dim iCounter As Long
If MsgBox("Soll der automatische E-Mail Versand gestartet werden?", _
vbYesNo + vbQuestion, "Frage") = vbNo Then Exit Sub
For iCounter = 1 To 2
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
Sheets("Selektionsliste").Select
.To = Cells(iCounter, 1)
.Subject = Cells(iCounter, 12)
.Body = Cells(iCounter, 14) & vbCrLf & vbCrLf & _
Cells(iCounter, 15) & vbCrLf & _
Cells(iCounter, 16) & vbCrLf & vbCrLf & _
Cells(iCounter, 17) & vbCrLf & vbCrLf & _
Cells(iCounter, 18) & vbCrLf
.Display
Set wsShell = CreateObject("WScript.Shell")
wsShell.AppActivate olApp
wsShell.SendKeys "%s"
Set wsShell = Nothing
Application.Wait (Now + TimeValue("0:00:05"))
End With
Next iCounter
Set olApp = Nothing
MsgBox "Der E-Mail Versand ist abgeschlossen"
End Sub

Es handelt sich um zwei Tabellenblätter: Eines für die Selektion und Texteingabe, das andere für die Datenaufbereitung zum Versand.
Bevor ich das oben erwähnte Makro starte, läuft dieses zur Lösung der Leerzeilen:
Sub LeereZeilenLöschen()
Dim i As Long
Dim rng As Object
Dim lEmpty As Boolean
For i = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
lEmpty = True
For Each rng In ActiveSheet.Rows(i).Cells
'sind alle Zelle leer ?
If rng.Value > "" Then
lEmpty = False
Exit For
End If
Next
If lEmpty = True Then
ActiveSheet.Rows(i).Delete
End If
Next i
End Sub
Die Anzahl der Mail-Empfänger variert ständig. Deshalb muss ich derzeit die Anzahl zu durchlaufenden Zeilen immer manuell im Code anpassen. Kann ich die korrekte Anzahl der gefüllten Zeilen (durch Code 2 eruiert) irgendwie in Code 1 übernehmen?
Gruss
Frédéric
Anzeige
AW: Ermittlung für For iCounter = 1 to x
28.07.2009 12:24:24
MichaV
Hallo,
ohne weiter auf Deine Makros einzugehen: Erstelle ein Modul und schreibe dort folgene Zeile hinein:
Public intZeilen as Long
Auf diese Variable kannst Du nun aus allen Prozeduren zugreifen. Wenn Du also in der Prozedur LeereZeilenLöschen() die Variable mit einem Wert füllst
intZeilen = durch Code 2 eruiert
kannst Du darauf in der Prozedur Sub () [ohne Namen?] zugreifen
For i=1 to intZeilen
Alles klar?
Gruß- Micha
AW: Ermittlung für For iCounter = 1 to x
28.07.2009 13:37:32
F.
Hallo Micha
Danke für die Hilfe.
Werde es versuchen.
PS: Sub hat Namen "Test".
Gruss
Frédéric
AW: Ermittlung für For iCounter = 1 to x
28.07.2009 14:13:13
Erich
Hi Frédéric,
probier mal das hier - ohne die Public-Variable:

Sub Test2()
Dim olApp As Application  ' war Object
Dim wsShell As Object     ' war ohne Typ, also Variant
Dim iCounter As Long
If MsgBox("Soll der automatische E-Mail Versand gestartet werden?", _
vbYesNo + vbQuestion, "Frage") = vbNo Then Exit Sub
Sheets("Selektionsliste").Select                        ' Anweisung kam später
For iCounter = 1 To Cells(Rows.Count, 1).End(xlUp).Row  ' war "To 2"
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
.To = Cells(iCounter, 1)
.Subject = Cells(iCounter, 12)
.Body = Cells(iCounter, 14) & vbCrLf & vbCrLf & _
Cells(iCounter, 15) & vbCrLf & _
Cells(iCounter, 16) & vbCrLf & vbCrLf & _
Cells(iCounter, 17) & vbCrLf & vbCrLf & _
Cells(iCounter, 18) & vbCrLf
.Display
Set wsShell = CreateObject("WScript.Shell")
wsShell.AppActivate olApp
wsShell.SendKeys "%s"
Set wsShell = Nothing
Application.Wait Now + TimeValue("0:00:05")
End With
Next iCounter
Set olApp = Nothing
MsgBox "Der E-Mail Versand ist abgeschlossen"
End Sub
@Micha:
intZeilen ist nur dann durch LeereZeilenLöschen() belegt,
wenn diese Prozedur mehr oder weniger unmittelbar vor Test gelaufen ist.
Zumindest sollte Excel zwischendurch nicht beendet worden sein.
Mir erscheint es einfacher und sicherer, die Zeilen in Test(2) selbst zählen zu lassen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Ermittlung für For iCounter = 1 to x
28.07.2009 15:37:08
F.
Hallo Erich
Irgendwas beisst sich. Die folgende Zeile wird als Fehlerhaft gekennzeichnet.
Set olApp = CreateObject("Outlook.Application")
Gruss
Frédéric
Mails mit Outlook in Schleife
28.07.2009 19:52:38
Erich
Hi Frédéric,
welche Fehlermeldung dabei erscheint (Nummer und Text), wäre sicher auch interessant!
In der Schleife wird x-mal ein Outlook.Application-Objekt erzeugt.
Könnte sein, dass das so Ärger macht.
Such doch mal hier im Archiv nach Outlook und Schleife. Da gibt es sicher viele Beispiele.
Ich arbeite nicht mit Outlook und kenne mich mit Vielfach-Mailversand nicht aus.
Ich lass die Frage deshalb offen.
Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Mails mit Outlook in Schleife
29.07.2009 08:43:17
F.
Hallo Erich
Die Meldung lautet:
Laufzeitfehler '13':
Typen unverträglich
Leider kann ich damit überhaupt nichts anfangen, da kompletter VBA-Anfänger.
Gruss
Frédéric
Mails mit Outlook in Schleife
29.07.2009 09:28:02
Erich
Hi,
meine Deklaration "Dim olApp As Application" war Unfug, es muss doch Object sein.
Das Outlook.Application-Objekt wird jetzt auch nur noch einmalig VOR der Schleife erzeugt.
Probier mal

Option Explicit
Sub Test2()
Dim olApp As Object
Dim wsShell As Object     ' war ohne Typ, also Variant
Dim iCounter As Long
If MsgBox("Soll der automatische E-Mail Versand gestartet werden?", _
vbYesNo + vbQuestion, "Frage") = vbNo Then Exit Sub
Sheets("Selektionsliste").Select                        ' Anweisung kam später
Set olApp = CreateObject("Outlook.Application")         ' Anweisung kam später
For iCounter = 1 To Cells(Rows.Count, 1).End(xlUp).Row  ' war "To 2"
With olApp.CreateItem(0)
.To = Cells(iCounter, 1)
.Subject = Cells(iCounter, 12)
.Body = Cells(iCounter, 14) & vbCrLf & vbCrLf & _
Cells(iCounter, 15) & vbCrLf & _
Cells(iCounter, 16) & vbCrLf & vbCrLf & _
Cells(iCounter, 17) & vbCrLf & vbCrLf & _
Cells(iCounter, 18) & vbCrLf
.Display
Set wsShell = CreateObject("WScript.Shell")
wsShell.AppActivate olApp
wsShell.SendKeys "%s"
Set wsShell = Nothing
Application.Wait Now + TimeValue("0:00:05")
End With
Next iCounter
Set olApp = Nothing
MsgBox "Der E-Mail Versand ist abgeschlossen"
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Mails mit Outlook in Schleife
29.07.2009 09:38:16
F.
Hallo Erich
Nun funktioniert das Ganze.... aber es schickt das Mail an alle hinterlegten Daten, nicht nur an die Selektierten.
Möchte mich an dieser Stelle bei Dir für die bisherige Hilfe bedanken.
Gruss
Frédéric
nur für Selektierte?
29.07.2009 09:52:34
Erich
Hi Frédéric,
hast du hier schon geschrieben, dass NICHT alle Zeilen aus dem Blatt "Selektionsliste" verarbeitet werden sollen?
Das hätte ich dann überlesen.
Was und wie selektierst du denn die gewünschten Zellen? Markierst du Zellen oder ganze Zeilen mit Tastatur oder Maus?
Eine Alternative: Du schreibst in einer noch freien Spalte ein X in alle Zeilen, die verarbeitet werden sollen.
Du siehst: Es gibt da mehrere Möglichkeiten.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: nur für Selektierte?
30.07.2009 16:14:12
F.
Hallo Erich
Ich schrieb nur was von den selektierten Zeilen. =)
Gerne erkläre ich Dir den Aufbau bzw versuche es.
Ziel:
Ein automatischer Reminder an ausgewählte Personen zu versenden. Die Anrede ist persönlich.
Ein Grossteil des Versandes geht an einen Assistenten. Deshalb ist im Betreff der Name des Betroffenen
hinter einem allgemeinen Text angehängt.
Es gibt zwei Tabellen. Die erste beinhaltet einen Grossteil der Daten für den Versand. In dem Zweiten Blatt selektiere ich mittels eines "x", ob diese Person betroffen ist oder nicht. Ebenso sind dort die einzelnen Daten hinterlegt. Ebenso die Texte für den Versand. Die verschiedenen Bestandteile sind mit Formeln verknüpft.
Ist die Selektion getroffen, sieht das erste Blatt z.B. so aus: (natürlich gekürzt)
xxxxx xxxxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxx
xxxxx xxxxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxx
xxxxx xxxxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxx
leer
xxxxx xxxxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxx
leer
leer
leer
xxxxx xxxxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxx
Um die Leeren Zeilen zu löschen, benutze ich ein Makro. Der Rest ist zum Versand gedacht.
Hier wären das 5 Zeilen. Diese Anzahl möchte ich gerne automatisch erkennen lassen und den Versandcode einfliessen lassen.
Wahrscheinlich ist das Ganze inzwischen zu kompliziert zusammengesetzt. Werde versuchen zu kürzen, dann klappt es sicher auch besser mit dem Code.
Gruss
Frédéric
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige