Anzeige
Archiv - Navigation
1872to1876
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

"Ablage" per Makro

"Ablage" per Makro
07.03.2022 07:37:26
LeRayZ
Hey,
Folgendes "Problem"
Ich würde gerne per Knopfdruck, die Zeilen, die in einer bestimmten Spalte (siehe unten) ausgefüllt sind, ausschneiden und in eine andere Mappe einfügen.
Also quasi:
Blatt: ,,13-2" : Wenn in einer Zeile die Spalte AT (Zeilenüberschrift: BA/EGZ versendet) ausgefüllt ist, dann die ganze Zeile ausschneiden und in das Blatt ,,13-2 Ablage" einfügen - und wenn Möglich die Zeilen im Ursprungsblatt aktualisieren, sodass keine leeren Zeilen entstehen
Ich bin für jede Hilfe sehr dankbar!
https://www.herber.de/bbs/user/151462.zip

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "Ablage" per Makro
07.03.2022 10:47:52
UweD
Hallo
- Mit Autofilter wäre das möglich.
- Die zwei ausgeblendeten Spalte C:D werden temporär eingeblendet, da das Zeilenkopieren sonst einen Spaltenversatz liefert
In ein Modul

Sub Ablegen()
Dim TB1 As Worksheet, TB2 As Worksheet, SP As Integer
Dim LR1 As Integer, LR2 As Integer, Z1 As Integer, Anz As Integer, Rng As Range
Set TB1 = Sheets("13-2")
Set TB2 = Sheets("13-2 Ablage")
SP = 46 'Spalte AT
Z1 = 8 'erste Zeile mit Daten
'Erste freie Zielzeile
LR2 = TB2.Columns(SP).Find(What:="", After:=TB2.Cells(Z1 - 1, SP), LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByColumns).Row
Application.ScreenUpdating = False
With TB1
LR1 = .Cells(.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
If .AutoFilterMode Then .AutoFilterMode = False ' Autofilter ausschalten
Set Rng = .Cells(Z1, SP).Resize(LR1 - Z1 + 1, 1)
Anz = WorksheetFunction.CountA(Rng) ' Anzahl der Einträge in der Spalte
If Anz > 0 Then
Rng.AutoFilter Field:=SP, Criteria1:=""
'temporäres Einblenden der Spalten CD
TB1.Columns("C:D").Hidden = False
Rng.EntireRow.Copy TB2.Rows(LR2) 'kopieren
Rng.EntireRow.Delete xlUp 'löschen
'wieder ausblenden CD
.Columns("C:D").Hidden = True
.ShowAllData ' Autofilter ausschalten
Else
MsgBox "Keine Daten in Spalte " & Columns(SP).Address(0, 0)
End If
End With
End Sub
LG UweD
Anzeige
AW: "Ablage" per Makro
07.03.2022 11:03:35
LeRayZ
Hey,
es werden zwar alle Zeilen mit einer ausgefüllten Zelle in AT rüberkopiert, jedoch werden alle anderen Zeilen gelöscht :/
AW: "Ablage" per Makro
07.03.2022 11:13:27
UweD
Hallo nochmal
&GT&GT jedoch werden alle anderen Zeilen gelöscht :/
Bei mir nicht.
Es werden nur die gefundenen Zeilen kopiert und genau Diese auch gelöscht.
Du kannst ja mal eine Datei mit Beispieleinträgen hochladen und nicht (wie geschehen) eine Datei ohne Daten
LG UweD
AW: "Ablage" per Makro
07.03.2022 11:43:16
UweD
Vorher
Userbild
Nachher
Userbild
Die 3 Zeilen , die in AT ein X hatten sind nun in der Ablage
und in der Ersten Tabelle weg. Aber nur die. von den 6 Zeilen sind 3 übrig
Anzeige
AW: "Ablage" per Makro
07.03.2022 11:51:46
LeRayZ
Also bei mir siehts das so aus: (es ändert sich nichts wenn ich bei Nachher den Filter rausnehme aus Spalte AT)
Vorher:
Userbild
Nachher:
Userbild
Die Zeilen wo ein X in Spalte AT sind, sind richtigerweise in der Ablage gelandet
AW: "Ablage" per Makro
07.03.2022 11:56:52
UweD
Sorry:
bei mir wird der Filter automatisch zurückgenommen,
und es sieht so aus wie eben gezeigt.
LG UweD
AW: "Ablage" per Makro
07.03.2022 11:58:41
LeRayZ
Was muss ich denn bei mir umstellen, dass er das bei mir auch macht
Anzeige
Keine Ahnung...
07.03.2022 12:37:25
UweD
...wo die Ursache liegt.
Evtl. kann jemand Anders das ja mal checken.
ich stelle die Frage auf OFFEN
AW: "Ablage" per Makro
07.03.2022 14:40:03
UweD
Hallo nochmal
ohne Autofilter ( bitte ausschalten ) per Schleife

Sub Ablegen()
Dim TB1 As Worksheet, TB2 As Worksheet, SP As Integer, i As Integer
Dim LR1 As Integer, LR2 As Integer, Z1 As Integer, Rng As Range
Set TB1 = Sheets("13-2")
Set TB2 = Sheets("13-2 Ablage")
SP = 46 'Spalte AT
Z1 = 8 'erste Zeile mit Daten
'Erste freie Zielzeile
LR2 = TB2.Columns(SP).Find(What:="", After:=TB2.Cells(Z1 - 1, SP), LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByColumns).Row
Application.ScreenUpdating = False
With TB1
LR1 = .Cells(.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
Set Rng = .Cells(Z1, SP).Resize(LR1 - Z1 + 1, 1)
If WorksheetFunction.CountA(Rng) > 0 Then 'Anzahl Einträge
'temporäres Einblenden der Spalten CD
TB1.Columns("C:D").Hidden = False
For i = LR1 To Z1 Step -1
If Intersect(.Rows(i), Rng)  "" Then
.Rows(i).Copy TB2.Rows(LR2) 'kopieren
.Rows(i).Delete xlUp
LR2 = LR2 + 1
End If
Next
'wieder ausblenden CD
.Columns("C:D").Hidden = True
Else
MsgBox "Keine Daten in Spalte: " & Left(Columns(SP).Address(0, 0), InStr(Columns(SP).Address(0, 0), ":") - 1)
End If
End With
End Sub
LG UweD
Anzeige
AW: "Ablage" per Makro
08.03.2022 08:19:59
LeRayZ
Es funktioniert!
Vielen DANK!!!
Prima. Danke für die Rückmeldung. owT
08.03.2022 09:03:43
UweD
AW: Prima. Danke für die Rückmeldung. owT
08.03.2022 09:44:58
LeRayZ
Leider funktioniert das leider nicht, wenn ich einen Blattschutz erstelle, um davor zu schützen, dass jemand die Formeln in Spalte A und H löscht.
Ich habe es dann mit der Datenüberprüfung versucht, jedoch schützt das nur vor der Eingabe, man kann also die Formeln löschen.
Gibt es hierfür einen Vorschlag?
AW: Prima. Danke für die Rückmeldung. owT
08.03.2022 10:10:15
UweD
Hallo
dann vorher den Schutz aufheben und nachher wieder setzten.
Das Passwort ist optional

Option Explicit
Sub Ablegen()
Dim TB1 As Worksheet, TB2 As Worksheet, SP As Integer, i As Integer
Dim LR1 As Integer, LR2 As Integer, Z1 As Integer, Rng As Range
Set TB1 = Sheets("13-2")
Set TB2 = Sheets("13-2 Ablage")
SP = 46 'Spalte AT
Z1 = 8 'erste Zeile mit Daten
'Erste freie Zielzeile
LR2 = TB2.Columns(SP).Find(What:="", After:=TB2.Cells(Z1 - 1, SP), LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByColumns).Row
Application.ScreenUpdating = False
With TB1
LR1 = .Cells(.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
LR1 = .Columns(SP).Find(What:="*", After:=.Cells(LR1, SP), SearchDirection:=xlPrevious, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns).Row 'letzte NICHT Leere Zeile
Set Rng = .Cells(Z1, SP).Resize(LR1 - Z1 + 1, 1)
If WorksheetFunction.CountA(Rng) > 0 Then 'Anzahl Einträge
.Unprotect ("DeinPasswort")
'temporäres Einblenden der Spalten CD
TB1.Columns("C:D").Hidden = False
For i = LR1 To Z1 Step -1
If Intersect(.Rows(i), Rng)  "" Then
.Rows(i).Copy TB2.Rows(LR2) 'kopieren
.Rows(i).Delete xlUp
LR2 = LR2 + 1
End If
Next
'wieder ausblenden CD
.Columns("C:D").Hidden = True
.Protect ("DeinPasswort")
Else
MsgBox "Keine Daten in Spalte: " & Left(Columns(SP).Address(0, 0), InStr(Columns(SP).Address(0, 0), ":") - 1)
End If
End With
End Sub
Habe auch das Finden der letzten Zeile noch verbessert und es werden über 1950 Durchläufe eingespart
LG UweD
Anzeige
AW: Prima. Danke für die Rückmeldung. owT
08.03.2022 11:27:49
LeRayZ
Super, das klappt ebenfalls!
Wenn jetzt z.B. keine Daten gefunden werden, zeigt er leider nicht die Msg von unten an sondern:
Userbild
wenn ich auf Debuggen gehe wird mir folgendes markiert:
Userbild
AW: Prima. Danke für die Rückmeldung. owT
08.03.2022 14:20:51
UweD
Nun aber...

Sub Ablegen()
Dim TB1 As Worksheet, TB2 As Worksheet, SP As Integer, i As Integer
Dim LR1 As Integer, LR2 As Integer, Z1 As Integer, Rng As Range, Anz As Integer
Set TB1 = Sheets("13-2")
Set TB2 = Sheets("13-2 Ablage")
SP = 46 'Spalte AT
Z1 = 8 'erste Zeile mit Daten
'Erste freie Zielzeile
LR2 = TB2.Columns(SP).Find(What:="", After:=TB2.Cells(Z1 - 1, SP), LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByColumns).Row
Application.ScreenUpdating = False
With TB1
LR1 = .Cells(.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
LR1 = .Columns(SP).Find(What:="*", After:=.Cells(LR1, SP), SearchDirection:=xlPrevious, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns).Row 'letzte NICHT Leere Zeile
If LR1 >= Z1 Then
Set Rng = .Cells(Z1, SP).Resize(LR1 - Z1 + 1, 1)
Anz = WorksheetFunction.CountA(Rng)
End If
If Anz > 0 Then 'Anzahl Einträge
.Unprotect ("DeinPasswort")
'temporäres Einblenden der Spalten CD
TB1.Columns("C:D").Hidden = False
For i = LR1 To Z1 Step -1
If Intersect(.Rows(i), Rng)  "" Then
.Rows(i).Copy TB2.Rows(LR2) 'kopieren
.Rows(i).Delete xlUp
LR2 = LR2 + 1
End If
Next
'wieder ausblenden CD
.Columns("C:D").Hidden = True
.Protect ("DeinPasswort")
Else
MsgBox "Keine Daten in Spalte: " & Left(Columns(SP).Address(0, 0), InStr(Columns(SP).Address(0, 0), ":") - 1)
End If
End With
End Sub
LG UweD
Anzeige
AW: "Ablage" per Makro
07.03.2022 10:49:07
Herbert_Grom
Hallo,
und für welche Zeile in AT soll das gelten?
Servus
AW: "Ablage" per Makro
07.03.2022 11:06:01
LeRayZ
Für alle Zeilen, wo die Zelle in AT ausgefüllt ist
also quasi:
=wenn(AT""; Zeile ausschneiden und in die nächste freie Zeile von Blatt ,,13-2 Ablage" einfügen + die Tabelle (von wo ausgeschnitten wurde) aktualisieren damit keine leeren Zeilen entstehen.
AW: "Ablage" per Makro
07.03.2022 11:53:21
UweD
Hallo nochmal
Was meinst du mit "die Tabelle (von wo ausgeschnitten wurde) aktualisieren damit keine leeren Zeilen entstehen."
Ausgeschnitten heißt: Zeilen werden ins Ziel verschoben und sind in der Quelle weg
Aktualisieren ? Die Zeilen darunter rutschen hoch
LG UweD
Anzeige
AW: "Ablage" per Makro
07.03.2022 11:56:06
LeRayZ
Also ich meinte eigentlich nur das:

,,Die Zeilen darunter rutschen hoch"
Also einfach, dass keine leeren Zeilen vorhanden sind, falls z.B. Zeile 10 in die Ablage wandert und Zeile 9 und 11 nicht
dann würde alles unter Zeile 10 eine hoch rutschen
AW: "Ablage" per Makro
07.03.2022 11:57:44
UweD
Ok, so macht das mein Makro (bei mir)

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige