Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1552to1556
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

Zeile nach Beding. in anderes Tabellenblatt versch

Zeile nach Beding. in anderes Tabellenblatt versch
20.04.2017 11:19:07
Maria
Guten Morgen!
habe ein kleines Problemchen. Habe folgende Bsp-Datei: https://www.herber.de/bbs/user/113000.xlsm
Ich möchte nun, dass wenn in der Tabelle "AKTUELL" in der Spalte "J" ein "a" ist, dass die Zeile in das Tabellenblatt "ERLEDIGT" 1:1 verschoben wird, sortiert nach Datum und Uhrzeit (also Spalte B und C) und dass in dem Tabellenblatt "AKTUELL" alle nachfolgenden Zeilen hochrutschen, dass also keine Leerzeile entsteht.
Ich möchte an dieser Stelle erwähnen, dass mir bei einem ähnlichen Problem erfolgreich geholfen wurde (vielen Dank an dieser Stelle an Werner!), allerdings kann ich den Code nicht auf dieses Problem anpassen... weil ich keine Ahnung davon habe. ich habs mehrmals versucht und bin kläglich gescheitert!
Bitte um Hilfe.

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile nach Beding. in anderes Tabellenblatt versch
20.04.2017 12:37:37
Dieter
Hallo Maria,
du kannst das z.B. mit dem folgenden Programm machen:

Sub Verschieben()
Dim copVar As Variant
Dim letzteZeileA As Long
Dim letzteZeileE As Long
Dim wsA As Worksheet  ' Blatt "AKTUELL"
Dim wsE As Worksheet  ' Blatt "ERLEDIGT"
Dim zeileA As Long
Dim zeileE As Long
Set wsA = ThisWorkbook.Worksheets("AKTUELL")
Set wsE = ThisWorkbook.Worksheets("ERLEDIGT")
letzteZeileA = wsA.Cells(wsA.Rows.Count, "A").End(xlUp).Row
letzteZeileE = wsE.Cells(wsE.Rows.Count, "A").End(xlUp).Row
zeileE = letzteZeileE + 1
For zeileA = letzteZeileA To 2 Step -1
If wsA.Cells(zeileA, "J") = "a" Then
copVar = wsA.Cells(zeileA, "A").Resize(1, 10)
wsE.Cells(zeileE, "A").Resize(1, 10) = copVar
wsA.Rows(zeileA).Delete
zeileE = zeileE + 1
End If
Next zeileA
If zeileE > 2 Then
With wsE.Sort
With .SortFields
.Clear
.Add Key:=wsE.Range("B2")
.Add Key:=wsE.Range("C2")
End With
.Header = xlYes
.SetRange Rng:=wsE.UsedRange
.Apply
End With
End If
End Sub
Ich habe das Programm in deine Arbeitsmappe eingefügt:
https://www.herber.de/bbs/user/113004.xlsm
Viele Grüße
Dieter
Anzeige
AW: Zeile nach Beding. in anderes Tabellenblatt versch
20.04.2017 12:48:55
Maria
hi, auf den ersten Blick super. Kann man noch irgendwie machen, dass er die Schaltflächen mit überträgt?
AW: Zeile nach Beding. in anderes Tabellenblatt versch
20.04.2017 15:03:41
Dieter
Hallo Maria,
das könnte dann z.B. so aussehen:

Sub Verschieben()
Dim copVar As Variant
Dim letzteZeileA As Long
Dim letzteZeileE As Long
Dim wsA As Worksheet  ' Blatt "AKTUELL"
Dim wsE As Worksheet  ' Blatt "ERLEDIGT"
Dim zeileA As Long
Dim zeileE As Long
Set wsA = ThisWorkbook.Worksheets("AKTUELL")
Set wsE = ThisWorkbook.Worksheets("ERLEDIGT")
letzteZeileA = wsA.Cells(wsA.Rows.Count, "A").End(xlUp).Row
letzteZeileE = wsE.Cells(wsE.Rows.Count, "A").End(xlUp).Row
zeileE = letzteZeileE + 1
For zeileA = letzteZeileA To 2 Step -1
If wsA.Cells(zeileA, "J") = "a" Then
copVar = wsA.Cells(zeileA, "A").Resize(1, 10)
wsE.Cells(zeileE, "A").Resize(1, 10) = copVar
wsA.Cells(zeileA, "K").Copy Destination:=wsE.Cells(zeileE, "K")
wsA.Rows(zeileA).Delete
zeileE = zeileE + 1
End If
Next zeileA
If zeileE > 2 Then
With wsE.Sort
With .SortFields
.Clear
.Add Key:=wsE.Range("B2")
.Add Key:=wsE.Range("C2")
End With
.Header = xlYes
.SetRange Rng:=wsE.UsedRange
.Apply
End With
End If
End Sub
Viele Grüße
Dieter
Anzeige
AW: Zeile nach Beding. in anderes Tabellenblatt versch
20.04.2017 16:07:38
Maria
funktioniert wunderbar! kann ich das in der endlos schleife haben? damit ich das makro nicht immer wieder abspielen muss? (heißt das so? ist das mit einer "endlos schleife" gemeint?)
AW: Zeile nach Beding. in anderes Tabellenblatt versch
21.04.2017 09:57:37
Dieter
Hallo Maria,
das was du meinst, ist eine Ereignisprozedur, die auf das Ereignis "Änderung eines Wertes in einem bestimmten Tabellenblatt" wartet und bei Eintreten darauf reagiert, also eine Worksheet_Change-Prozedur.
Diese Prozedur steht im Code-Modul des Blattes "AKTUELL" (zu sehen ist die Prozedur, wenn die im Projektexplorer einen Doppelklick auf "Tabelle1(AKTUELL)" machst).

Private Sub Worksheet_Change(ByVal Target As Range)
Dim copVar As Variant
Dim wsE As Worksheet  ' Blatt "ERLEDIGT"
Dim zeileA As Long
Dim zeileE As Long
If Target.Cells.Count > 1 Then Exit Sub
If Target.Column  10 Then Exit Sub
If Target.Row = 1 Then Exit Sub
If Target = "a" Then
Application.EnableEvents = False
zeileA = Target.Row
Set wsE = ThisWorkbook.Worksheets("ERLEDIGT")
zeileE = wsE.Cells(wsE.Rows.Count, "A").End(xlUp).Row + 1
copVar = Me.Cells(zeileA, "A").Resize(1, 10)
wsE.Cells(zeileE, "A").Resize(1, 10) = copVar
Me.Cells(zeileA, "K").Copy Destination:=wsE.Cells(zeileE, "K")
Me.Rows(zeileA).Delete
If zeileE > 1 Then
With wsE.Sort
With .SortFields
.Clear
.Add Key:=wsE.Range("B2")
.Add Key:=wsE.Range("C2")
End With
.Header = xlYes
.SetRange Rng:=wsE.UsedRange
.Apply
End With
End If
Application.EnableEvents = True
End If
End Sub

https://www.herber.de/bbs/user/113026.xlsm
Übrigens ist eine Endlosschleife etwas sehr Unerwünschtes, nämlich eine Schleife, die nicht mehr aufhört zu arbeiten und nur mit Gewalt gestoppt werden kann.
Viele Grüße
Dieter
Anzeige
AW: Zeile nach Beding. in anderes Tabellenblatt versch
25.04.2017 08:15:15
Maria
Userbild
geht nicht... was stört da?
AW: Zeile nach Beding. in anderes Tabellenblatt versch
25.04.2017 09:59:11
fcs
Hallo Maria,
das Makro musst du mit den Schaltflächen im Blatt "AKTUELL" starten. In der Zeile mit dem Fehler wird der variablen oSchalter das Objekt(Form, Formularschaltfläche) zugewiesen, mit dem das Makro gestartet wurde.
Startest du das Makro anders -zum Beispiel direkt üner das Menü, dann gibt es den Fehler.
ggf. musst du den Schaltflächen das Makro "Drucken" neu zuweisen, da zumindest jetzt nach dem runterladen der Datei von Dieter bei mir der Link des Makros der Schaltflächen in eine andere Datei zeigt.
Gruß
Franz
Anzeige
AW: Zeile nach Beding. in anderes Tabellenblatt versch
25.04.2017 10:13:59
Maria
ja, ich hab das modulfenster zugemacht und schon hat es geklappt, weil ich mich ja nicht mehr darin befand sondern in der tabelle aktuell... ))) ich lerne hier ja jeden tag dazu! danke für die antwort :-)
AW: Zeile nach Beding. in anderes Tabellenblatt versch
25.04.2017 10:05:42
Maria
also an sich funktioniert es, ich denke, ich darf das Modulfenster nicht auf haben, sonst bockt er. hab es zu, und es funktioniert, warum auch immer.. verstehe ich nicht so ganz.
aber was ich mit einer endlosschlaufe meinte, was ja eigentlich das ereignisprozedur heißt.. also wenn ich jetzt die datei neu öffne und dann in die eine spalte das häkchen setze, dann schiebt er das nicht rüber. dann muss ich wieder der code aufmachen und auf makro abspielen klicken, erst dann passiert was. kann man das automatisch einstellen?
Anzeige
AW: Zeile nach Beding. in anderes Tabellenblatt versch
25.04.2017 10:38:57
Werner
Hallo Maria,
das Makro zum Verschieben der entsprechenden Zeilen gehört ins CodeModul des Blattes "AKTUELL" und dort ins Worksheet_Change Ereignis. Vermutlich hast du das in einem allgemeinen Modul.
Hier mal jetzt noch meine Version.
https://www.herber.de/bbs/user/113094.xlsm
Gruß Werner
AW: Zeile nach Beding. in anderes Tabellenblatt versch
25.04.2017 12:50:49
Maria
aha, so funkt! wußte ich auch nicht, wofür das ist... vielen lieben dank!
da ich aber noch eine spalte (wusste ich erst heute) dazu einfügen soll, werde ich das von Dieter nehmen, weil ich da den Inhalt eher nachvollziehen kann und die Spalten abändern kann. weil hier in diesem blicke ich nicht so durch...
aber wenn einfach, bitte erklären: warum, wenn die zeile rüberkopiert wird, wird in dem tabellenblatt alles markiert? warum ist das so?
Anzeige
AW: Zeile nach Beding. in anderes Tabellenblatt versch
20.04.2017 12:47:37
fcs
Hallo Maria,
mit folgendem Makro sollte das Verschieben und Sortieren funktionieren.
Gruß
Franz
Sub ErledigtVerschiebn()
Dim Zeile_Q As Long, Zeile_Z, Zeile As Long, Zeile_L As Long
Dim bolVerschoben As Boolean
Dim StatusCalc As Long, StatusCopyObjects As Boolean
Dim wksQ As Worksheet, wksZ As Worksheet
Set wksQ = ActiveWorkbook.Worksheets("AKTUELL")
Set wksZ = ActiveWorkbook.Worksheets("ERLEDIGT")
With Application
'ggf. Status für Kopieren von Objekten mit Zellen anpassen, damit Schaltflächen mit  _
verschoben werden
StatusCopyObjects = Application.CopyObjectsWithCells
If StatusCopyObjects = False Then
Application.CopyObjectsWithCells = True
End If
'Makrobremsen lösen
.ScreenUpdating = False
.EnableEvents = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
With wksZ
'letzte Zeile im Zielblatt,, Spalte A
Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
Zeile_Z = Zeile_L
End With
With wksQ
'letzte Datenzeile im Quellblatt, Spalte A
Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
If Zeile_L > 1 Then
For Zeile_Q = 2 To Zeile_L
If .Cells(Zeile_Q, 10).Text = "a" Then 'erledigt
'Zeile verschieben
Zeile_Z = Zeile_Z + 1
.Rows(Zeile_Q).Cut Destination:=wksZ.Rows(Zeile_Z)
bolVerschoben = True 'Merker, das mindestens eine Zeile verschoben wurde
End If
Next
If bolVerschoben = True Then
'leerzeilen löschen in AKTUELL
With .Range(.Cells(2, 1), .Cells(Zeile_L, 1))
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete Shift:=xlShiftUp
End With
With wksZ
'Einträge in "ERLEDIGT" nach Datum/Zeit aufsteigend sortieren
With .Range(.Rows(1), .Rows(Zeile_Z))
.Sort Key1:=.Range("B1"), Order1:=xlAscending, _
key2:=.Range("C1"), order2:=xlAscending, Header:=xlYes
End With
End With
End If
MsgBox "F E R T I G", vbOKOnly, "erledigte verschieben"
Else
MsgBox "keine Daten vorhanden in Blatt """ & wksQ.Name & """", _
vbOKOnly, "erledigte verschieben"
End If
End With
With Application
'Status ggf wierde zurücksetzen
If StatusCopyObjects  Application.CopyObjectsWithCells Then
Application.CopyObjectsWithCells = StatusCopyObjects
End If
'Makrobremsen zurücksetzen
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
End With
End Sub

Anzeige
AW: Nachfragen
20.04.2017 12:47:43
Werner
Hallo Maria,
jetzt alles wieder umgeschmissen? Nichts mehr mit Pulldown?
Ein paar Fragen dazu:
Du hast eine Schaltfläche "Erledigte verschieben" auf dem Blatt "AKTUELL"
1. soll jetzt nur dann verschoben werden, wenn die Schaltfläche betätigt wird?
2. also nicht mehr automatisch, sobald in Spalte J das a eingetragen wird?
3. wie soll in "ERLEDIGT" soriert werden? Aktuellstes Datum oben, aktuellste Uhrzeit oben?
4. soll auch noch die Möglichkeit rein, dass die Daten aus "ERLEDIGT" wieder zurück nach "AKTUELL" sollen?
Warte auf deine Antworten.
Gruß Werner
Anzeige
AW: Nachfragen
20.04.2017 12:59:32
Maria
Hallo Werner!
nee, nichts umgeschmissen! das ist eine andere liste. das ist quasi die original telefonliste, bei der du mir mit dem "ausdrucken wenn man die schlatfläche anklickt" geholfen hast. mit der anderen ist der chef sehr zufrieden. jetzt will er die telefonliste auch so haben, dass die zeile aus seinen augen verschwindet, wenn er ein häkchen in spalte J setzt.
auf deine fragen:
1. nein, die schaltfläche ist ja zum ausdrucken da.
2. doch (darum brauche ich eine endlos-schleife (heißt das so?), damit ich das makro nicht immer wieder starten muss)
3. ich habs mir grad noch mal angeguckt, nach Spalte A, also die laufende Nummer
4. nein, in diesem fall nicht! aber, es wäre super, wenn die schaltflächen mit übertragen werden, weil ich kann es mir jetzt schon denken, der chef das ein oder das andere doch noch im nachhinein ausdrucken wollen wird...
wie gesagt, es handelt sich um die Ursprungstelefonliste. Genauso ist sie bei mir auf dem PC, nur mit anderem Inhalt.
Anzeige
AW: Nachfragen
20.04.2017 14:24:48
Werner
Hallo Maria,
ich dachte das soll automatisch passieren, sobald in Spalte J der Haken gesetzt wird?
Jetzt auf einmal doch mit einem separaten Button?
Na dann hast du ja jetzt deine Lösungen.
Gruß Werner
AW: Nachfragen
20.04.2017 15:59:20
Maria
hä? der Button ist zum drucken da, nicht damit die zeile in eine andere tabelle verschoben wird. ich brauche einen code, damit wenn man in der spalte J ein häkchen setzt, dann die zeile verschoben wird. habe ich was falsches geschrieben, oder reden wir jetzt an einander vorbei? die schaltflächen (die zum ausdrucken da sind) sollten möglichst mit auf das andere tabellenblatt übertragen werden, damit man auch von diesem tabellenblatt ausdrucken kann.

75 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige