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

.cut über alle Tabellenblätter

.cut über alle Tabellenblätter
06.03.2016 13:51:38
schmeli
Hallo Zusammen,
ich bräuchte mal wieder eure Hilfe.
Ich hab einen Code geschrieben, der in einem Tabellenblatt nach nach dem Wort "Intern" in einer bestimmten Spalte sucht, die entsprechende Zeile ausschneidet und in neues Blatt einfügt. Jetzt möchte ich diesen Code erweitern, dass er in allen Blättern sucht und die Liste im Blatt "Intern" entsprechend erweitert.
Weiß jemand wie ich den Code erweitern kann? Es fehlt bestimmt noch ein Zähler von Tabellenblatt 2 bis letztes und eine Suche nach der letzten gefüllten Zelle im Blatt "Intern"
Vielen lieben Dank!
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long

Private Sub cmd_Intern_Click()
With Worksheets("test")  '

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

Betreff
Datum
Anwender
Anzeige
AW: .cut über alle Tabellenblätter
06.03.2016 14:34:47
Werner
Hallo,
versuch mal
Private Sub cmd_Intern_Click()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
Dim i AS Long
n = Worksheets("Intern").Cells(Rows.Count, 1).End(xlUp).Row + 1
If n 
Hat es einen bestimmten Grund, weshalb du deine Variablen außerhalb der Sub definiert hast? Ich habe mal in die Sub rein genommen.
Das Tabellenblatt "Intern" habe ich von der Suche ausgenommen. Ich gehe davon aus, dass du dort nur deine Daten sammeln willst und nicht auch suchen.
Ist aber ungetestet, also bitte mit einer Kopie deiner Datei versuchen.
Gruß Werner

Anzeige
AW: .cut über alle Tabellenblätter
06.03.2016 15:13:56
schmeli
Hallo Werner,
Vielen Dank!
Die Variablen außerhalb der Sub zu definieren hab ich in meiner Test xls irgendwie immer so gemacht, hat aber keinen bestimmten Grund.
VBA meckert jetzt beim letzten Next i das es kein For hätte... hmm... was hat er denn nur wieder.
P.S. Der zweite Beitrag hilft mir noch viel mehr. Ich hab nie den Weg zurück gefunden, um meinen Beiträge zu kommentieren. Danke sage gehört sich natürlich!

AW: .cut über alle Tabellenblätter
06.03.2016 15:30:25
Werner
Hallo,
setz mal das Next i nach das End With
Gruß Werner

AW: .cut über alle Tabellenblätter
06.03.2016 15:37:15
schmeli
Hallo Werner,
nein leider auch nicht, jetzt stört ihn das with worksheets(i)
dafür hat er aber alles ausgeschnitten, nur nicht wieder eingefügt. :(
puhh

Anzeige
AW: .cut über alle Tabellenblätter
06.03.2016 16:03:05
Werner
Hallo,
sicherlich nur ne Kleinigkeit in der Reihenfolge End If - Next Zeile - Next i
Kann aber im Moment nicht testen, hab nur ein Tablet zur Hand.
Kann erst morgen wieder drüber schauen.
Wenn du willst kannst du ja den Beitrag offen stellen -bei Antwort vor dem senden das Kästchen rechts neben dem Passwort Feld anhaken.
Aber mal ne grundsätzliche Frage. Von wie vielen Tabellen und wie vielen Zeilen die nach dem Begriff Durchsicht werden sollen sprechen wir denn? Der Code klappert jede Tabelle Zeile für Zeile ab, das kann dann schon mal dauern.
Wie kommt denn dein "Intern" in die Zelle? Unter Umständen böte sich da eine Lösung mit dem Filter an. Oder aber ein Event-Makro das die entsprechende Spalte in den Tabellen überwacht. Sobald dann dort "Intern" eingetragen wird, wird die entsprechende Zeile kopiert und dann gelöscht.
Gruß Werner

Anzeige
AW: .cut über alle Tabellenblätter
06.03.2016 18:51:30
schmeli
Hallo Werner,
bin auch grad erst wieder am Rechner dran. Ich spiel nochmal ein bisschen rum, muss ja irgendwie gehen. Das ist bestimmt wieder so ein Wald vor lauter Bäumen Ding.
Die Anzahl der Tabellenblätter kann völlig variieren von 2 bis x, je nach Projekt. (Eine Datei ein Projekt). Das Intern kommt manuell durch die Benutzer rein. Sobald die Excel fertig ist sollen alle Internen Vermerke in ein gesondertes Blatt/vielleicht sogar eine neue xls.
Wenn das dann dauert ist das kein Problem. Besser als wenn ein Benutzer alle Blätter durchsucht und die Vermerke händisch übergibt. Da ist der Fehler vorprogrammiert.
Danke nochmal für deine Hilfe.

Anzeige
AW: .cut über alle Tabellenblätter
06.03.2016 14:51:37
Werner
Hallo,
und was mir gerade auch noch auffällt:
Es gebietet die Höflichkeit auf Hilfe auch zu antworten und sich zu bedanken.
https://www.herber.de/forum/messages/1479636.html
Gruß Werner

kleiner "Hund" vom Werner
06.03.2016 19:54:11
Michael
Hi zusammen,
das kann ja nicht (ganz) gehen:
Private Sub cmd_Intern_Click()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
Dim sh1 As Worksheet
n = Worksheets("Intern").Cells(Rows.Count, 1).End(xlUp).Row + 1
If n  "Intern" Then
ZeileMax = sh1.Range("F" & sh1.Rows.Count).End(xlUp).Row
For Zeile = 2 To ZeileMax
If sh1.Cells(Zeile, 6).Value = "Intern" Then
sh1.Rows(Zeile).Cut Destination:=Sheets("Intern").Rows(n)
sh1.Rows(Zeile).EntireRow.Delete
n = n + 1
End If
Next Zeile
End If
Next
End Sub
Schöne Grüße,
Michael

Anzeige
AW: kleiner "Hund" vom Werner
06.03.2016 20:13:46
Werner
Hallo Michael,
nehme die Backpfeife dankend an. Wieder mal nicht weit genug gedacht. Da fällt es mir doch wie Schuppen aus den Haaren. Was mich aber richtig ärgert ist die Tatsache, dass ich anfangs auch
If Worksheets(i).Name "Intern" drin hatte - warum ich es dann andersherum gemacht habe - keine Ahnung.
Bin halt leider noch Novize, versuche aber mein Bestes. Knapp vorbei ist auch daneben.
Aber - wieder was gelernt.
Gruß Werner

AW: kleiner "Hund" vom Werner
07.03.2016 10:17:07
schmeli
Guten Morgen zusammen,
Das mit dem n hab ich mir auch schon gedacht und das Worksheet vorne angestellt.
Habs jetzt mit dem neuen Code von Michael versucht und beim letzten Next noch ein sh1 hinzugefügt...
und siehe da.. es tut sich gar nichts, kein ausschneiden kein eintragen, einfach nix..
Ich hab mich jetzt langsam glaub völlig im Wald verirrt. Das kann doch nicht unlösbar sein, oder?
Vielen Dank für eure Unterstützung!

Anzeige
AW: kleiner "Hund" vom Werner
07.03.2016 12:08:18
Werner
Hallo,
mit dem Code von Michael läuft es doch. Schau dir mal die Testdatei https://www.herber.de/bbs/user/104157.xlsm an. Ich habe nur noch eingebaut, dass es egal ist, ob in der Zelle jetzt "Intern" oder "intern" steht.
Die Datei hat nur 4 Tabellenblätter und je Blatt 9 Zeilen die überprüft werden müssen. Schau dir mal an, wie lange das dauert.
In der zweiten Testdatei https://www.herber.de/bbs/user/104158.xlsm habe ich dir mal ein Event-Makro ins Blatt 2 gemacht. Sobald in Blatt 2, Spalte F, ab Zeile 2 (Zeile 1 für Überschriften) das Wort "Intern" eingegeben wird und die Zelle verlassen wird, wird die Zeile ins Blatt "Intern" kopiert und im Blatt 2 gelöscht.
Gruß Werner

Anzeige
AW: kleiner "Hund" vom Werner
07.03.2016 13:41:28
schmeli
Hallo Werner,
ich vermute langsam hier stimmt was ganz anderes nicht in meinen xls Einstellungen.
Der Button in deiner ersten Tabelle war bei mir Tod, da ging nix. Hab aber einen Cmd eingebaut und den Code eingefügt, funzt trotzdem nicht. Kann die Active-X Umstellung bei xls etwas damit zu tun haben?!?
Also wenn der Code bei anderen Rechner funktioniert, werd ich das ja wohl zum Laufen kriegen.
Ich melde mich sobald ich die Ursache gefunden habe!
Vielen Dank für all die Mühen..

AW: kleiner "Hund" vom Werner
07.03.2016 14:51:27
schmeli
Es funktioniert!!!!
Der Fehler war wieder simpler als man möchte. Es war das Wort nach dem er gesucht hat "Intern" das hat ihm nicht gepasst. Bei einem Test mit dem Suchkriterium "X" hat alles funktioniert!

Anzeige
AW: kleiner "Hund" vom Werner
07.03.2016 15:00:24
Wermer
Hallo,
na dann is ja jut. Aber wenn es am Intern lag, dann stand in der Zelle auch nicht Intern drin - vielleicht ein Leerzeichen am Anfang oder am Ende.
Gruß Peter

AW: kleiner "Hund" vom Werner
07.03.2016 15:43:32
schmeli
Hallo Zusammen,
hab die Sache mit dem "intern" auch in Werners Tabellen probiert. Da lief bei mir auch gar nix. mit dem Ersetzten durch eine Zahl oder x dann einwandfrei. Ich weiß nicht was meine Excelversion wieder hat, aber mei das Ziel ist erreicht.
Vielen liebe Dank nochmal an alle die geholfen haben!

AW: Danke für die Rückmeldung. o.w.T
07.03.2016 15:59:44
Wermer

Nachlese
07.03.2016 17:24:07
Michael
Hi zusammen,
ich bin ja froh, daß es jetzt funktioniert.
Warum das mit "intern" nicht gehen soll, ist mir völlig schleierhaft - bei mir hat's ja testhalber auch geklappt.
Verfeinerungsmöglichkeiten:
a) Abfrage nach: If ltrim(trim(lcase(sh1.Cells(Zeile, 6).Value))) = "intern" Then
das lcase setzt alle Buchstaben in kleine um, trim schneidet Leerzeichen rechts und ltrim links ab.
b) Man könnte auch auf jedem Tabellenblatt in Spalte F eine Suche nach dem Begriff machen, Info siehe hier:
https://www.herber.de/mailing/vb/html/xlmthfind.htm
Damit sollten evtl. Performance-Probleme erledigt sein.
Übrigens erwartet VBA NICHT zwingend, daß die Variable einer For-Schleife beim Next noch einmal genannt wird: man kann sie nur zwecks Lesbarkeit mit hinschreiben - gerade bei verschachtelten FORs. Hier finde ich aber konsequentes Einrücken des Codes sinnvoller.
@Werner: "Knapp daneben..." Ach was, Fehler finden ist IMMER einfacher als selber programmieren; laß mal nen Kritiker ne Symphonie schreiben...
Mit vereinter Hilfe geht's doch,
Happy Exceling,
Michael

Anzeige
Fertiger Code und Feedback
07.03.2016 19:24:37
schmeli
Hallo Zusammen,
@Michael: Vielen Dank für die Hinweise. Ja, Fehler finden ist meist leichter. Da her bin ich echt froh über dieses Forum, wie oft steckt doch der Teufel im Detail, denn man selber nicht mehr erkennt.
Hab deine Variante kurz durch gespielt, gut zu wissen, "trim" kann ich glaub noch öfters gebrauchen. Hab mich jetzt aber dafür entschieden, dass Auswahlkriterium "1" anzunehmen. Eine "1" ist weniger anfällig gegen individuelle Benutzereingaben, hoffe ich :)
So sieht jetzt mein fertiger Code aus:
Private Sub cmd_Intern_Click()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
Dim sh1 As Worksheet
Application.ScreenUpdating = False
n = Worksheets("Intern").Cells(Rows.Count, 6).End(xlUp).Row + 1
If n  "Intern" Then
ZeileMax = sh1.Range("F" & sh1.Rows.Count).End(xlUp).Row
For Zeile = 4 To ZeileMax
If (UCase(sh1.Cells(Zeile, 6).Value)) = UCase("1") Then
sh1.Rows(Zeile).Copy
Sheets("Intern").Rows(n).PasteSpecial Paste:=xlValues
n = n + 1
sh1.Rows(Zeile).EntireRow.Delete
Zeile = Zeile - 1
End If
Next Zeile
End If
Next
Application.ScreenUpdating = True
MsgBox "Fertig"
Worksheets("Intern").Select
End Sub
Nachdem Ausschneiden erniedrige ich den Zeilen Zähler nochmal um 1, da sonst bei zwei aufeinanderfolgenden Zeilen mit einer "1" , die zweite übersprungen wird.
Habs auch über ein (...).Row To 2 Step -1 probiert, aber dann ist die Reihenfolge absteigend und bis ich das hin kriege, muss ich glaub noch ein bisschen lernen.
Und ganz klar Application.Screenupdating damit dem Benutzer nicht schlecht wird vor dem Monitor.

AW: Fertiger Code und Feedback
08.03.2016 10:19:16
Werner
Hallo,
uuups, das hatte weder Michael noch ich auf dem Schirm. Bei Löschen sollte immer von hinten nach vorne vorgegangen werden, dann tritt das Problem mit den aufeinanderfolgenden Zellen/Zeilen nicht auf. Also einfach anstatt
For Zeile = 4 To ZeileMax
dann
For Zeile = ZeileMax to 4 Step -1
und das
Zeile = Zeile -1
aus dem Code löschen.
Deine gesammelten Daten im Tabellenblatt "Intern" sind auch in deiner derzeitigen Version nicht sortiert, da du sie ja von unterschiedlichen Blättern sammelst.
Wenn du die Daten im Blatt "Intern" noch sortiert brauchst, dann zeichne doch einfach mit dem Makrorekorder das sortieren auf und bau die Sortierroutine am Ende deines derzeitigen Codes einfach noch mit ein.
Gruß Werner

AW: Fertiger Code und Feedback
08.03.2016 13:09:48
schmeli
Hallo Werner,
hmm also bei mir taucht alles sortiert auf ; tabellenblatt1 von Zeile 4 bis letzte Zeile, dann Tabellenblatt 2, Tabellenblatt 3... Wenn ich deinen Code benutze, sucht er sich von unten nach oben durch die Blätter.
Da der Button nur einmal am Ende des Projektes ausgeführt werden sollte, müsste es somit funktionieren.

AW: Fertiger Code und Feedback
08.03.2016 13:32:49
Werner
Hallo,
wenn dir alles so passt wie du es hast dann ist ja gut.
Gruß Werner

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige