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

mit Makro bestimmte Zeilen übertragen

mit Makro bestimmte Zeilen übertragen
27.11.2015 11:28:10
Patrick
Hallo,
ich stehe vor folgender Aufgabe:
Mit einem Makro soll das erste Tabellenblatt nach Datumseinträgen in der Spalte M abgesucht werden. Das Datum wird in Form von TT.MM.JJJJ eingetragen. Die gefundenen Zeilen sollen dann ausgeschnitten werden und in das Tabellenblatt 2 fortlaufend eingefügt werden.
Vorraussetzungen:
1. Nur die Werte sollen übertragen werden, keine Formeln.
2. Spalte A ist in beiden Tabellen mit fortlaufenden Nummern gefüllt. Diese sollen unbeachtet bleiben.
3. Die "freien" Zeilen im Tabellenblatt 1 sollen dann verschwinden, die Tabelle sich also zusammenziehen, dass keine freien Zeilen zu sehen sind.
Kann mich hier jemand unterstützen?
MfG

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit Makro bestimmte Zeilen übertragen
27.11.2015 14:32:18
Werner
Hallo Patrick,
versuch mal das hier.
Public Sub Zeile_mit_Datum()
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Dim letzteQuelle As Long
Dim letzteZiel As Long
Dim vorhanden As Boolean
Dim x As Long
vorhanden = False
Set wsQuelle = Sheets("Tabelle1") 'Quellblatt anpassen
Set wsZiel = Sheets("Tabelle2") 'Zielblatt anpassen
letzteQuelle = wsQuelle.Cells(Rows.Count, 13).End(xlUp).Row 'letzte belegte Zeile in Spalte M  _
ggf. anpassen
letzteZiel = wsZiel.Cells(Rows.Count, 13).End(xlUp).Row + 1 'erste freie Zeile in Spalte M ggf.  _
anpassen
With wsQuelle
For x = letzteQuelle To 2 Step -1 'Prüfung bis Zeile 2, da angenommen in Zeile 1 Überschriften  _
ggf. anpassen
If IsDate(Cells(x, 13)) Then
wsZiel.Cells(letzteZiel, 1).Resize(, 13).Value = .Cells(x, 1).Resize(, 13).Value 'Übertägt  _
Spalte A bis Spalte M ggf. anpassen
.Cells(x, 1).Resize(, 13).Delete xlUp 'löscht im Quellblatt von Spalte A bis Spalte M ggf.  _
anpassen
letzteZiel = letzteZiel + 1
vorhanden = True
End If
Next x
End With
If vorhanden = False Then
MsgBox "Es gibt keine Datensätze mit " & vbLf & "einem Datum in Spalte M." _
& vbLf & vbLf & "Es wurden keine Daten kopiert!!", , "Hinweis für " & Environ("UserName")
End If
End Sub
Übertragen werden von Tabelle1 die Daten in den Spalten A bis M ins Tabellenblatt2 Spalte A bis M, wenn im Tabellenblatt1 in Spalte M ein Datum eingetragen ist.
Gruß Werner

Anzeige
AW: mit Makro bestimmte Zeilen übertragen
27.11.2015 15:36:15
Patrick
Hallo Werner,
erstmal Danke für deine Hilfe. Da ich mich aber nicht so gut mit Makros auskenne...könntest du mir einen Gefallen tun und die Textteile in deinem Script markieren, die nicht im Makro drin stehen sollen? Also die, die als Erklärung dienen? Das wäre super.

AW: mit Makro bestimmte Zeilen übertragen
27.11.2015 15:58:54
Werner
Hallo Patrick,
das kann alles so in ein Modul. Meine Erklärungen habe ich aus kommentiert, die machen keine Probleme. Das siehst du daran, dass der Text im Modul in Grün erscheint.
Das einzige was du vielleicht noch machen mußt ist die Zeilenumbrüche wie der raus zu machen (siehst du am Unterstrich). Die setzt die Forums Software nämlich selbst.
Gruß Werner

Anzeige
AW: mit Makro bestimmte Zeilen übertragen
02.12.2015 13:23:46
Patrick
Hallo,
besten Dank. Funktioniert bestens.
Nun soll ich aber noch drei weitere Tabellenblätter einfügen, die genau so aussehen, wie das erste. Auch aus diesen sollen nun alle Zeilen mit Eintrag in Spalte M in die "finished"-Datei rübergezogen werden. Wie muss ich das bestehende Makro anpassen? Momentan sieht das Makro wie folgt aus:
Public Sub Zeile_mit_Datum()
unprotectSheets
Dim wsQuelle As Worksheet
Dim wsZiel As Worksheet
Dim letzteQuelle As Long
Dim letzteZiel As Long
Dim vorhanden As Boolean
Dim x As Long
vorhanden = False
Set wsQuelle = Sheets("Day to Day Business open")
Set wsZiel = Sheets("finished actions")
letzteQuelle = wsQuelle.Cells(Rows.Count, 13).End(xlUp).Row
letzteZiel = wsZiel.Cells(Rows.Count, 13).End(xlUp).Row + 1
With wsQuelle
For x = letzteQuelle To 6 Step -1
If IsDate(Cells(x, 13)) Then
wsZiel.Cells(letzteZiel, 2).Resize(, 13).Value = .Cells(x, 2).Resize(, 13).Value
.Cells(x, 2).Resize(, 13).Delete xlUp
letzteZiel = letzteZiel + 1
vorhanden = True
End If
Next x
If vorhanden = False Then
MsgBox "No finished action was" & vbLf & "found in the list." _
& vbLf & vbLf & "No data transmitted!!", , "Hinweis für " & Environ("UserName")
End If
End With
protectSheets
End Sub

Public Sub unprotectSheets()
Dim Tabellenblatt As Worksheet
For Each Tabellenblatt In ThisWorkbook.Sheets
Tabellenblatt.Unprotect "bla"
Next Tabellenblatt
End Sub

Public Sub protectSheets()
Dim Tabellenblatt As Worksheet
For Each Tabellenblatt In ThisWorkbook.Sheets
Tabellenblatt.Protect "bla"
Next Tabellenblatt
End Sub

Anzeige
AW: mit Makro bestimmte Zeilen übertragen
02.12.2015 17:36:45
Werner
Hallo Patrick,
das sind ein paar Infos zu wenig. Soll das Makro über alle Blätter laufen ausgenommen das Blatt in das die Daten geschrieben werden? Da könnte man dann eine Schleife über alle Blätter laufen lassen, außer dem Zielblatt.
Wenn nicht, könnte man die Namen der entsprechenden Tabellenblätter in ein Array aufnehmen und die Schleife über das Array laufen lassen. Geht aber auch nur wenn die Blattnamen gleich bleiben und nicht geändert werden.
Gruß Werner

AW: mit Makro bestimmte Zeilen übertragen
02.12.2015 19:42:06
Werner
Hallo Patrick,
hab mal was gebastelt, ist aber nicht getestet, hab es nur kurz am Tablet geklimpert (hab ehrlich gesagt keinen Bock mehr jetzt noch meine Kiste anzuwerfen). Kann also nicht garantieren, dass es funktioniert.
Public Sub Zeile_mit_Datum()
unprotectSheets
Dim wsZiel As Worksheet
Dim letzteQuelle As Long
Dim letzteZiel As Long
Dim vorhanden As Boolean
Dim x As Long
Dim i AS Long
vorhanden = False
Set wsZiel = Sheets("finished actions")
letzte Ziel = wsZiel.Cells(Rows.Count, 13).End(xlUp).Row + 1
For i = 2 To 5 'Blätter 2, 3, 4 und 5 an deine Bedürfnisse anpassen
With Sheets(i)
letzteQuelle = .Cells(Rows.Count, 13).End(xlUp).Row
For x = letzteQuelle To 6 Step -1
If IsDate(Cells(x, 13)) Then
wsZiel.Cells(letzteZiel, 2).Resize(, 13).Value = .Cells(x, 2).Resize(, 13).Value
.Cells(x, 2).Resize(, 13).Delete xlUp
letzteZiel = letzteZiel + 1
vorhanden = True
End If
Next x
Next i
If vorhanden = False Then
MsgBox "No finished action was" & vbLf & "found in the list." _
& vbLf & vbLf & "No data transmitted!!", , "Hinweis für " & Environ("UserName")
End If
End With
protectSheets
End Sub
Über die Variable i spreche ich die Blätter über ihren INDEX an. Das hat weder was mit dem zu tun, was auf dem Tabellenblattreiter steht. Wenn du im VBA-Projektexplorer oben links Schausteller dann stehen da u.a. die Tabellenplätze die es im Workbook gibt. Da steht dann z.B. Tabelle1 (Tabelle1) oder aber auch
Tabelle1 (DeinTabellenblattnamen) wenn du die Tabelle umbenannt hast. Das was vor der Klammer steht ist der interne Indexname des Tabellenblattes.
Derzeit sollten (wenn es denn funktioniert) die Daten aus den Blättern 2-3-4-5 gezogen werden. Blatt 1 und ggf. weitere Blätter bleiben außen vor.
Das müsstest du hält an deine Bedürfnisse anpassen. For i = 2 To 5 (Blatt 2,3,4,5)
For i = 3 To 4 (Blatt 3,4)
Gruß Werner

Anzeige
AW: mit Makro bestimmte Zeilen übertragen
02.12.2015 22:44:22
Patrick
Hallo Werner,
ich bin dir so dankbar für deine Hilfe und ich komm mir selbst blöd vor, dass ich soviel fragen muss. Aber nur so lerne ich was.
Ich habe dein Makro eingearbeitet. Nur leider kommt eine Fehlermeldung: "Fehler beim Kompilieren. Next ohne For" und hervorgehoben wird die Zeile "Next i".
Ich bin jetzt mal so frei und füge die Blanko-Datei mal ein. Vielleicht hilft das ja bei der Fehlersuche.
Ich hoffe, du nimmst es mir nicht übel, dass ich schon wieder nerve :-(
https://www.herber.de/bbs/user/101977.xlsm
Gruß Patrick

Anzeige
AW: mit Makro bestimmte Zeilen übertragen
02.12.2015 22:48:13
Patrick
Hallo Werner,
ich bin dir so dankbar für deine Hilfe und ich komm mir selbst blöd vor, dass ich soviel fragen muss. Aber nur so lerne ich was.
Ich habe dein Makro eingearbeitet. Nur leider kommt eine Fehlermeldung: "Fehler beim Kompilieren. Next ohne For" und hervorgehoben wird die Zeile "Next i".
Ich bin jetzt mal so frei und füge die Blanko-Datei mal ein. Vielleicht hilft das ja bei der Fehlersuche.
Ich hoffe, du nimmst es mir nicht übel, dass ich schon wieder nerve :-(
https://www.herber.de/bbs/user/101977.xlsm
Gruß Patrick

Anzeige
AW: mit Makro bestimmte Zeilen übertragen
03.12.2015 11:23:35
Werner
Hallo Patrick,
so sollte es funktionieren.
### Wichtig: Das Blatt "finished action" muss zwingend das letzte Blatt sein!!!! ###
Warum kann ich dir auch nicht sagen. Eigentlich müsste das egal sein, weil ich die Blätter über ihren Code Namen anspreche. Trotzdem funktioniert es nicht, wenn das Blatt "finished action" nicht das letzte Blatt ist.
Ich hoffe du kannst damit leben. Du solltest halt nur aufpassen wenn weitere Blätter dazu kommen.
Beispiel: Du hast insgesamt 8 Blätter. Der Code soll sich aber nur auf die Blätter 1-6 auswirken. Dann im Code die Zeile For i = 1 To 4 ändern in For i = 1 To 6. Die Blätter 7 und 8 müssen dann aber zwingend die beiden letzten Blätter sein.
https://www.herber.de/bbs/user/101986.xlsm
Gruß Werner

Anzeige
AW: mit Makro bestimmte Zeilen übertragen
03.12.2015 11:57:01
Werner
Hallo Patrick,
hab noch was vergessen. Deinen Code im Workbook bevor close habe ich fürs testen komplett aus kommentiert. Da musst du die Aus Kommentierung wieder raus machen.
Gruß Werner

AW: mit Makro bestimmte Zeilen übertragen
03.12.2015 12:05:43
Patrick
Hi Werner,
genau so. Ich weiß nicht, wie ich dir danken soll. Du hast mir wirklich sehr geholfen.
Und ich werd mich jetzt noch mehr mit Makros auseinander setzen, damit ich es besser verstehe
und dazu lerne. Wird aber noch eine Weile dauern, bis ich das so lockern aus dem Ärmel zaubern kann
wie du.
Danke nochmals.
Gruß Patrick

AW: Danke für die Rückmeldung.
03.12.2015 13:06:32
Werner
Hallo Patrick,
gerne doch. Aber das mit dem locker aus dem Ärmel schütteln siehst du falsch. Bin in Bezug auf VBA selbst noch ein Anfänger. Das Eine oder Andere weiß ich in Grundzügen. Für den Rest bemühe ich hier im Forum gerne die Recherche.
Dann viel Erfolg noch.
Gruß Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige