Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
776to780
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
776to780
776to780
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
For Each Next Schleife
04.07.2006 05:35:34
Oliver
Jungs, ich weiss nicht mehr weiter...
In einer Datei werden alle Ausgaben auf einem Arbeitsblatt("Gesamt") zeilenweise erfasst.In Spalte "D" steht das Kuerzel des Buchungskontos, dem sie zuzuordnen sind. Mit einem Button kann man mit Hilfe einer Userform neue Konten erstellen, wobei bei diesem Vorgang immer ein neues Arbeitsblatt, das das Kontokuerzel als Name hat, erstellt. Mit Hilfe des folgenden Makros sollen dann die Ausgaben von der Gesamtaufstellung auf die einzelnen Konten aufgeteilt werden (Kriterium ist hierfuer das Kuerzel in Spalte "D")

Sub buchen()
Application.ScreenUpdating = False
Dim wks As Worksheet
Dim name As Variant
For Each wks In ActiveWorkbook.Worksheets
If wks.name <> "Gesamt" Then
name = wks.name
wks.Range("a4:f300").Clear
For i = 3 To Sheets("Gesamt").UsedRange.Rows.Count
Cells(i, 4).Select
If ActiveCell.Value = name Then
wks.Cells((i + 1), 2).Value = Sheets("Gesamt").Cells(i, 1).Value
wks.Cells((i + 1), 3).Value = Sheets("Gesamt").Cells(i, 2).Value
wks.Cells((i + 1), 4).Value = Sheets("Gesamt").Cells(i, 3).Value
wks.Cells((i + 1), 5).Value = Sheets("Gesamt").Cells(i, 6).Value
wks.Cells((i + 1), 6).Value = Sheets("Gesamt").Cells(i, 7).Value
wks.Cells((i + 1), 1).Value = "=row()-3"
Else
End If
Next i
wks.Range("a1:N300").Columns.AutoFit
Else
End If
Next wks
Application.ScreenUpdating = True
End Sub

...das Makro soll alle Arbeitsblaetter durchgehen, erst den gesamten Bereich loeschen (da das Makro regelmaessig ausgefuehrt wird und keine Doppelbuchungen auftreten sollen) und dann alle Eintraege, die dem Kriterium (Kuerzel) entsprechen uebernehmen.Das klappt auch, allerdings werden auch Eintraege auf dem Sheet "Gesamt" geloescht(nur einzelne)bzw. ueberschrieben.Warum?Muss an der Logik liegen, aber an selbiger haperts ja manchmal, wenn man zulange exelt.
Zusatzfrage:Im selben Schritt moechte ich dann die Zeilen "zusammenraffen",d.h. allen Blaettern die leeren Zeilen,die durch das Makro (s.o.) entstehen, loeschen.Mit einer For Each Next Schleife klappt das nicht wirklich gut (es bleiben leere Zeilen bestehen.
Gruss und Danke im Voraus!
Oliver

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Each Next Schleife
04.07.2006 05:56:12
Oliver
Okay, weiss nicht was eben los war, nach mehrmaligem Ausprobieren:Das Makro loescht anscheinend doch nichts mehr vom Sheet"Gesamt", aber dafuer werden auf den jeweiligen Sheets in Spalte "H2", wo die Summe des Kontos erfasst wird der (mit dem "Konto hinzufuegen"-Makro gesetze) Wert von "=sum(d4:d300) auf "=sum(d4:d4)" veraendert.Warum-wegen dem Loeschvorgang im obigen Makro?
Dank euch!
AW: For Each Next Schleife
04.07.2006 13:58:29
Martin
Hallo Oliver,
im einzelnen kann und will ich das nicht nachvollziehen. Allerdings ist klar, dass Du einige unzureichende Referenzen auf Zellen und Tabellenblätter in Deinem Code hast, die potentiell Probleme bereten können. Ändere mal
If wks.name "Gesamt" Then
name = wks.name
wks.Range("a4:f300").Clear
For i = 3 To Sheets("Gesamt").UsedRange.Rows.Count
Cells(i, 4).Select
If ActiveCell.Value = name Then
in
If wks.name "Gesamt" Then
wks.Range("a4:f300").Clear
For i = 3 To Sheets("Gesamt").UsedRange.Rows.Count
If wks.Cells(i, 4).Value = wks.name Then
Man sollte auch keine Variablennamen wähloen (hier: name), die in VBA schon "belegt" sind.
Zur Zusatzfrage:
Lasse die For-Next-Schleife von unten nach oben arbeiten, dann werden durch die Löschungen keine Zeilen übersprungen.
For i = 200 to 10 Step -1
If irgendwas then
Rows(i).Delete
End If
Next i
Gruß
Martin Beck
Anzeige
AW: For Each Next Schleife
06.07.2006 03:59:03
Oliver
Hallo Martin!
Vielen Dank fuer deine Tipps - sehr hilfreich. Vor allem,die Schleife von unten laufen zu lassen-bin ich nicht drauf gekommen,super!!!
Die Loesung zu meiner zweiten Nachfrage war denkbar einfach:Einfach eine Summe mit absolutem Bezug als Wert der Zelle definieren, nicht mit relativem.
Danke nochmals!
Gruss, Oliver

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige