Supportnet / Forum / Tabellenkalkulation
Visual Basic & Exel + Schleifen
Frage
Schleifen bei [b]Visual Basic[/b] einrichten und mehrere [b]Tabellen[/b] in eine kopieren hilfe eines [u]Makros[/u] !
Antwort 1 von riese
berg hoch geht´s schwerer als zu fuß !
was willst du ???????
adam
was willst du ???????
adam
Antwort 2 von Kennyger
Also ich habe sagen wir ma 20 Tabellen mit jeweils 10 Spalten und 5 Zeilen nun möchte ich diese 20 Tabellen in eine und alle 5 zeilen immer hinterher schreiben und das mit einem Makro in einer Schleife verfassen !
Antwort 3 von coros
Hallo Kennyger ,
gestatte mir zum Anfang eine kleine Anmerkung. Ein Hallo am Anfang und ein Gruß am Ende würde Deinen Beitrag gleich viel netter aussehen lassen. Wenn Du zum Bäcker gehst sagst Du ja auch beim Reingehen "Guten Tag" und beim Gehen "Auf Wiedersehen". Denn die Leute, an die Du Deine Frage richtest, sitzen zwar am PC, sind aber dennoch Menschen.
Nun zu Deiner etwas spärlichen Frage. Kopiere nachfolgendes Makro in ein StandardModul und starte es über z.B. eine Befehlsschaltfläche.
Mit diesem Makro wird ein neues Tabellenblatt mit dem Namen "Zusammenfassung" erstellt. Darin werden die Daten aus alen Tabellenblättern der Arbeitsmappe aus dem Bereich A1:J5 hineinkopiert.
Ich hoffe Du meintest das so. Wenn nicht, melde Dich wieder. Schreibe dann aber bitte etwas deutlicher, was Du möchtest.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
gestatte mir zum Anfang eine kleine Anmerkung. Ein Hallo am Anfang und ein Gruß am Ende würde Deinen Beitrag gleich viel netter aussehen lassen. Wenn Du zum Bäcker gehst sagst Du ja auch beim Reingehen "Guten Tag" und beim Gehen "Auf Wiedersehen". Denn die Leute, an die Du Deine Frage richtest, sitzen zwar am PC, sind aber dennoch Menschen.
Nun zu Deiner etwas spärlichen Frage. Kopiere nachfolgendes Makro in ein StandardModul und starte es über z.B. eine Befehlsschaltfläche.
Option Explicit
Sub Zusammenfassen()
Dim i As Integer
Application.ScreenUpdating = False
With Worksheets.Add
.Name = "Zusammenfassung"
End With
For i = 1 To Worksheets.Count
If Sheets(i).Name <> "Zusammenfassung" Then
Sheets(i).Range("A1:J5").Copy
Sheets("Zusammenfassung").Cells(Sheets("Zusammenfassung").Range("A65536").End(xlUp).Offset(1, 0).Row, 1).PasteSpecial
End If
Next
End Sub
Mit diesem Makro wird ein neues Tabellenblatt mit dem Namen "Zusammenfassung" erstellt. Darin werden die Daten aus alen Tabellenblättern der Arbeitsmappe aus dem Bereich A1:J5 hineinkopiert.
Ich hoffe Du meintest das so. Wenn nicht, melde Dich wieder. Schreibe dann aber bitte etwas deutlicher, was Du möchtest.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von Kennyger
Hi, ;)
1. Frage wäre das ist das bestehende makro was ich jetzt habe und würde jetzt gerne wissen ob ich nicht immer den dateinemen bzw Ort angeben muss...
sondern einfach sagen kann das er eine dateri nach der nächsten aus dem ordner nimmt....
2.Frage wäre ob jemand mir in dem makro einaml die bezeichnung der Range("B5:L385"). und Rows("4:696"). erklären könnte das einzigste was ich weiß ist das ,das die bezeichnung der SPalte bzw Zeile ist.
Sub Makro1()
'
' Makro1 Makro
' Makro am 06.03.2007 von . aufgezeichnet
'
'
ChDir "C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner"
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\33.xls"
Selection.AutoFilter
Rows("4:696").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L385").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
Range("B5").Select
ActiveSheet.Paste
Selection.AutoFilter Field:=3, Criteria1:="<>"
Selection.AutoFilter Field:=3, Criteria1:="="
ActiveWindow.SmallScroll Down:=-12
Range("B13").Select
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\333.xls"
Application.CutCopyMode = False
Selection.AutoFilter
Rows("4:619").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L416").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
ActiveWindow.SmallScroll Down:=-9
ActiveSheet.Paste
Selection.AutoFilter Field:=3, Criteria1:="="
Range("C29").Select
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\3333.xls"
Application.CutCopyMode = False
Selection.AutoFilter
Selection.AutoFilter
Rows("4:194").Select
Selection.AutoFilter
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L290").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
Range("B21").Select
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\33333.xls"
Application.CutCopyMode = False
Selection.AutoFilter
Selection.AutoFilter
Rows("4:194").Select
Selection.AutoFilter
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L290").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
Range("B21").Select
ActiveSheet.Paste
Selection.AutoFilter Field:=3
Range("A9").Select
Windows("33.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Windows("333.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Windows("3333.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Range("A2").Select
Windows("33333.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Range("A2").Select
End Sub
1. Frage wäre das ist das bestehende makro was ich jetzt habe und würde jetzt gerne wissen ob ich nicht immer den dateinemen bzw Ort angeben muss...
sondern einfach sagen kann das er eine dateri nach der nächsten aus dem ordner nimmt....
2.Frage wäre ob jemand mir in dem makro einaml die bezeichnung der Range("B5:L385"). und Rows("4:696"). erklären könnte das einzigste was ich weiß ist das ,das die bezeichnung der SPalte bzw Zeile ist.
Sub Makro1()
'
' Makro1 Makro
' Makro am 06.03.2007 von . aufgezeichnet
'
'
ChDir "C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner"
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\33.xls"
Selection.AutoFilter
Rows("4:696").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L385").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
Range("B5").Select
ActiveSheet.Paste
Selection.AutoFilter Field:=3, Criteria1:="<>"
Selection.AutoFilter Field:=3, Criteria1:="="
ActiveWindow.SmallScroll Down:=-12
Range("B13").Select
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\333.xls"
Application.CutCopyMode = False
Selection.AutoFilter
Rows("4:619").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L416").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
ActiveWindow.SmallScroll Down:=-9
ActiveSheet.Paste
Selection.AutoFilter Field:=3, Criteria1:="="
Range("C29").Select
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\3333.xls"
Application.CutCopyMode = False
Selection.AutoFilter
Selection.AutoFilter
Rows("4:194").Select
Selection.AutoFilter
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L290").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
Range("B21").Select
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\33333.xls"
Application.CutCopyMode = False
Selection.AutoFilter
Selection.AutoFilter
Rows("4:194").Select
Selection.AutoFilter
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L290").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
Range("B21").Select
ActiveSheet.Paste
Selection.AutoFilter Field:=3
Range("A9").Select
Windows("33.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Windows("333.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Windows("3333.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Range("A2").Select
Windows("33333.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Range("A2").Select
End Sub
Antwort 5 von coros
Hallo Kennyger,
irgendwie komme ich mir jetzt verarscht vor. Deine Fragen aus AW2 (20 Tabellen mit 10 Spalte) und AW4 (verschiedene Dateien auslesen) sind nun völlig verschieden und haben irgendwie nichts gemeinsam. Überlege DIr erst mal genau, was Du möchtest und dann melde Dich wieder mit einer genauen Beschreibung von dem, was Du eigentlich vor hast.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
irgendwie komme ich mir jetzt verarscht vor. Deine Fragen aus AW2 (20 Tabellen mit 10 Spalte) und AW4 (verschiedene Dateien auslesen) sind nun völlig verschieden und haben irgendwie nichts gemeinsam. Überlege DIr erst mal genau, was Du möchtest und dann melde Dich wieder mit einer genauen Beschreibung von dem, was Du eigentlich vor hast.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 6 von Kennyger
Hallo, Oliver wie du siehst habe ich schon eine Schleife konstruiert die aber bis jetzt noch nicht komplett funktioniert ...weil, mir diese zwei Fragen noch unklar sind könntest du mir weiter helfen?
1. Frage wäre das ist das bestehende makro was ich jetzt habe und würde jetzt gerne wissen ob ich nicht immer den dateinemen bzw Ort angeben muss...
sondern einfach sagen kann das er eine dateri nach der nächsten aus dem ordner nimmt....
2.Frage wäre ob jemand mir in dem makro einaml die bezeichnung der Range("B5:L385"). und Rows("4:696"). erklären könnte das einzigste was ich weiß ist das ,das die bezeichnung der SPalte bzw Zeile ist.
1. Frage wäre das ist das bestehende makro was ich jetzt habe und würde jetzt gerne wissen ob ich nicht immer den dateinemen bzw Ort angeben muss...
sondern einfach sagen kann das er eine dateri nach der nächsten aus dem ordner nimmt....
2.Frage wäre ob jemand mir in dem makro einaml die bezeichnung der Range("B5:L385"). und Rows("4:696"). erklären könnte das einzigste was ich weiß ist das ,das die bezeichnung der SPalte bzw Zeile ist.
Antwort 7 von coros
Hallo Kennyger,
wenn Du das unter besser beschreiben verstehst!?! Für mich ist das der gleiche Inhalt wie in AW4. Aber egal....
1. In Deinem Makro sehe ich nirgends eine Schleife, auch nicht, wenn Du schreibst, Du hättest eine Schleife konstruiert. Was Du gepostet hast, ist ein Makro, dass DU wahrscheinlich mit dem Makrorekorder aufgezeichnet hast. Jedenfalls gehe ich davon aus, wenn ich die ganzen Select sehe. Ich habe Dein Makro in eine Schleife eingearbeitet, kann Dir aber nicht sagen, dass es 100%ig läuft, da ich es nicht getestet habe. In diesem Makro befindet sich eine Do/ Loop-Anweisung, über die jede Datei in dem Verzeichnis "C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner" öffnet und dann den Code anwendet. Abschließend wird die geöffnete Datei wieder geschlossen. Kopiere nachfolgendes Makro in ein StandardModul.
2. "Range("B5:L385")" grenzt bzw. legt einen Bereich, in diesem Fall den Bereich von Zelle B5 bis Zelle L385, ein/fest.
"Rows("4:696")" bezieht sich auf die Zeilen. In diesem Fall werden die Zeilen 4 bis 696 festgelegt/ angesprochen.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
wenn Du das unter besser beschreiben verstehst!?! Für mich ist das der gleiche Inhalt wie in AW4. Aber egal....
1. In Deinem Makro sehe ich nirgends eine Schleife, auch nicht, wenn Du schreibst, Du hättest eine Schleife konstruiert. Was Du gepostet hast, ist ein Makro, dass DU wahrscheinlich mit dem Makrorekorder aufgezeichnet hast. Jedenfalls gehe ich davon aus, wenn ich die ganzen Select sehe. Ich habe Dein Makro in eine Schleife eingearbeitet, kann Dir aber nicht sagen, dass es 100%ig läuft, da ich es nicht getestet habe. In diesem Makro befindet sich eine Do/ Loop-Anweisung, über die jede Datei in dem Verzeichnis "C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner" öffnet und dann den Code anwendet. Abschließend wird die geöffnete Datei wieder geschlossen. Kopiere nachfolgendes Makro in ein StandardModul.
Option Explicit
Sub Makro1()
Dim Dateiname As String
Dateiname = Dir("C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\*.xls")
Do While Dateiname <> ""
Workbooks.Open Dateiname
Selection.AutoFilter
Rows("4:696").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L385").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenpla0test.xls").Activate
Range("B5").Select
ActiveSheet.Paste
Selection.AutoFilter Field:=3, Criteria1:="<>"
Selection.AutoFilter Field:=3, Criteria1:="="
ActiveWindow.SmallScroll Down:=-12
Range("B13").Select
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\333.xls"
Application.CutCopyMode = False
Selection.AutoFilter
Rows("4:619").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L416").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
ActiveWindow.SmallScroll Down:=-9
ActiveSheet.Paste
Selection.AutoFilter Field:=3, Criteria1:="="
Range("C29").Select
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\3333.xls"
Application.CutCopyMode = False
Selection.AutoFilter
Selection.AutoFilter
Rows("4:194").Select
Selection.AutoFilter
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L290").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
Range("B21").Select
Workbooks.Open Filename:= _
"C:\Dokumente und Einstellungen\BRaune\Desktop\Neuer Ordner\Neuer Ordner\33333.xls"
Application.CutCopyMode = False
Selection.AutoFilter
Selection.AutoFilter
Rows("4:194").Select
Selection.AutoFilter
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="<>"
Range("B5:L290").Select
Selection.Copy
Windows("FB-Z-L2-Maßnahmenplatest.xls").Activate
Range("B21").Select
ActiveSheet.Paste
Selection.AutoFilter Field:=3
Range("A9").Select
Windows("33.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Windows("333.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Windows("3333.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Range("A2").Select
Windows("33333.xls").Activate
Application.DisplayAlerts = False
ActiveWindow.Close
Range("A2").Select
ActiveWorkbook.Close True
Dateiname = Dir
Loop
End Sub
2. "Range("B5:L385")" grenzt bzw. legt einen Bereich, in diesem Fall den Bereich von Zelle B5 bis Zelle L385, ein/fest.
"Rows("4:696")" bezieht sich auf die Zeilen. In diesem Fall werden die Zeilen 4 bis 696 festgelegt/ angesprochen.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 8 von Kennyger
Meine Frage war ja NICHT den Dateinamen
bei jeder Öffnung angeben zu müssen....
bei jeder Öffnung angeben zu müssen....