Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1668to1672
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

Schleife in Makro einbinden

Schleife in Makro einbinden
24.01.2019 10:12:48
Patrick
Hallo zusammen,
ich benötige ein wenig Hilfe bei der Anpassung meiner Makros in einer Datei. Bisher kann ich über einen Button Daten importieren. Sie landen dann automatisch auf dem Reiter "SAP Daten". Zusätzlich gibt es einen Monatsreiter (aktuell "Januar 2019") und einen "Erledigt" Reiter. Ich möchte jetzt folgendes per Makro umsetzen:
1. Wenn in Spalte H bei "SAP Daten" "ja" steht, dann sollen die Werte aus Spalte A, B, D, E, F und G in den aktuellen Monatsreiter in die erste freie Zeile kopiert werden (Index von "SAP Daten" -1). Das habe ich jetzt fest zum Testen für eine Zeile hinbekommen. Ich bräuchte es aber natürlich dynamisch und für alle Werte, bei denen "ja" steht.
Mein Code-Schnipsel dafür sieht wie folgt aus:

Sub SAP_Kopieren()
If Range("H18").Value = "ja" Then
Range("A18:B18,D18:G18").Select
Selection.Copy
Worksheets(Worksheets("SAP Daten").Index - 1).Select
Range("A24").Select
ActiveSheet.Paste
End If
End Sub

2. Wenn im aktuellen Monatsreiter in Spalte L "nein" steht und Spalte K = "" --> Werte aus Spalte A:G ausschneiden im Monatsreiter und in erster freier Zeile im "Erledigt" Reiter einfügen. Auch hier muss das Ganze wieder dynamisch für alle Werte mit "nein" funktionieren.
Hier mein bisheriger Ansatz:

Sub Erledigt_Kopieren()
If Range("L9").Value = "nein" Then
Range("A9:G9").Select
Selection.Copy
Sheets("Erledigt").Select
Range("A16").Select
ActiveSheet.Paste
Worksheets(Worksheets("SAP Daten").Index - 1).Select
Rows(9).Delete Shift:=xlUp
End If
End Sub

Könnt ihr mich hierbei ein wenig unterstützen?
Hier der Link zur Excel: https://www.herber.de/bbs/user/127057.zip
Viele Grüße
Patrick

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife in Makro einbinden
24.01.2019 11:46:12
MCO
Moin Patrick!
Vielleicht so?
Du musst dir allerdings in deiner Mappe ein Modul erzeugen (im VBA, 2tes Symbol oben links)
Das ist alles in allem besser, damit du sheet-unabhängig programmieren kannst.
Sub test_SAP()
Dim rw As Range
Dim ziel_sheet As Worksheet
Set ziel_sheet = Sheets(Sheets("SAP Daten").Index - 1)
For Each rw In Range("A:A").SpecialCells(xlCellTypeConstants)
If Range("H" & rw.Row) = "ja" Then _
Range("A" & rw.Row & ":B" & rw.Row & ",D" & rw.Row & ":G" & rw.Row).Copy ziel_sheet. _
Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
Next rw
End Sub

Sub test_monat()
Dim rw As Range
Sheets(1).Activate
For Each rw In Range("A:A").SpecialCells(xlCellTypeConstants)
If Range("L" & rw.Row) = "nein" And Range("K" & rw.Row) = "" Then _
Range("A" & rw.Row & ":G" & rw.Row).Cut Sheets("Erledigt").Range("A" & Rows.Count). _
End(xlUp).Offset(1, 0)
Next rw
Set Rng = Range("A6:A" & ActiveSheet.UsedRange.Rows.Count)
Set Rng = Rng.specialcellls(xlCellTypeBlanks)
Rng.EntireRow.Delete
End Sub
Gruß, MCO
Anzeige
AW: Schleife in Makro einbinden
24.01.2019 12:44:26
Patrick
Hi MCO,
vielen Dank schon mal. Der erte Part, also test_SAP, funktioniert. Beim zweiten bekomme ich eine Fehlermedlung: Laufzeitfehler 438 - Objekt unterstützt diese Eigenschaft oder Methode nicht. Beim Debuggen markiert er dann diese Zeile "Set Rng = Rng.specialcellls(xlCellTypeBlanks)".
Warum steht eigentlich hier "Set Rng = Range("A6:A" & ActiveSheet.UsedRange.Rows.Count)" A6? Soll das so sein?
AW: Schleife in Makro einbinden
24.01.2019 13:07:53
Torsten
mach mal ein l weg bei

specialcellls(xlCellTypeBlanks)

AW: Schleife in Makro einbinden
24.01.2019 17:08:37
Patrick
Ok, danke dir. Aber wieso "A6"? Müsste da nicht "A:A" stehen?
AW: Schleife in Makro einbinden
25.01.2019 07:10:05
Patrick
Es funktioniert jetzt wie es soll. Ich habe lediglich noch zwei Kleinigkeiten, vielleicht bekommen wir die ja noch gelöst.
1. Wenn ich die Daten aus dem Monatsreiter in den Erledigt Reiter kopiere, kommt eine Fehlermeldung "Keine Zellen gefunden Laufzeitfahler 1004", wenn keine Zeilen mit "nein" mehr vorhanden sind. Kann man das irgendwie abfangen.
2. Im SAP Daten Reiter ist das Zahlenformat durch den SAP Import ziemlich bescheiden. Kann man den ",000" Part irgendwie entfernen und ein normales Zahlenformat erreichen?
Anzeige
AW: Schleife in Makro einbinden
25.01.2019 11:29:57
Piet
Hallo
setzte vor die For Next Schleife noch den Befehl: - IF WorksheetFunktion.CountIf() = 0 Then Exit Sub
Vor dem Import von SAP kann man eine ganze Spalte mit Columns(x).NumberFormat = xxx formatieren, oder nachher.
mfg Piet
AW: Schleife in Makro einbinden
25.01.2019 11:34:33
Patrick
Hi Piet,
wenn ich die Zeile ergänze, kommt Laufzeitfehler 424 - Objekt erforderlich. Hier mein Code:
'Kopiert die Daten aus dem Monatsreiter in den Erledigt Reiter
Sub Monatsdaten_Kopieren()
Dim rw As Range
Sheets(1).Activate
If WorksheetFunktion.CountIf() = 0 Then Exit Sub
For Each rw In Range("A:A").SpecialCells(xlCellTypeConstants)
If Range("L" & rw.Row) = "nein" And Range("K" & rw.Row) = "" Then _
Range("A" & rw.Row & ":K" & rw.Row).Cut Sheets("Erledigt").Range("A" & Rows.Count). _
End(xlUp).Offset(1, 0)
Next rw
Set Rng = Range("A3:A" & ActiveSheet.UsedRange.Rows.Count)
Set Rng = Rng.SpecialCells(xlCellTypeBlanks)
Rng.EntireRow.Delete
End Sub
Beim Nummernproblem hatte ich schon folgendes versucht, aber es hilft nicht. Vielleicht kannst du mir ja den entsprechenden Code anpassen
Anzeige
AW: Schleife in Makro einbinden
25.01.2019 11:59:33
Piet
Hallo
probier es bitte so: - IF WorksheetFunction.CountIf(Range("A:A"), "Nein") = 0 Then Exit Sub
mfg Piet
AW: Schleife in Makro einbinden
25.01.2019 12:49:18
Patrick
Jetzt kommt keine Fehlermeldung mehr, aber es wird auch nichts mehr kopiert.
AW: Schleife in Makro einbinden
25.01.2019 17:33:27
Piet
Hallo Patrick
gut das du die Beispieldatei geschickt hast, sonst haetten wir noch ewig "rumgedocktert"!
Drei Faktoren waren zu berücksichtigen. Falsch Spalte bei WorksheetFunktion, ich nahm A an statt L! Man achte auf die Schreibweise von "nein" oder "Nein"' Und ein vorhandenes "nein" heist NICHT das diese Zeile immer gelöscht wurde. - Man achte auch Spalte K.
Ich denke mit zwei zusaetzlichen IFs sollte es jetzt klappen, probier es bitte mal aus.
mfg Piet
'Kopiert die Daten aus dem Monatsreiter in den Erledigt Reiter
Sub Monatsdaten_Kopieren()
Dim rw As Range
Sheets(1).Activate
If WorksheetFunction.CountIf(Range("L:L"), "nein") = 0 Then Exit Sub
For Each rw In Range("A:A").SpecialCells(xlCellTypeConstants)
If Range("L" & rw.Row) = "nein" And Range("K" & rw.Row) = "" Then _
Range("A" & rw.Row & ":K" & rw.Row).Cut Sheets("Erledigt").Range("A" & Rows.Count). _
End(xlUp).Offset(1, 0)
Next rw
Set Rng = Range("A3:A" & ActiveSheet.UsedRange.Rows.Count)
Set Rng = Rng.SpecialCells(xlCellTypeBlanks)
If Rng.Count > 0 Then Rng.EntireRow.Delete
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige