Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
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
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Mehrere Zeilen Makieren ( mit Variable )

Mehrere Zeilen Makieren ( mit Variable )
28.12.2007 10:48:08
steffen
Guten Morgen,
Ich möchte insgesamt immer zwei Zeilen makieren und Sie dann in eine neue Mappe kopieren
z.B.
Range("1:1,3:3").Select
die erste Zeile soll immer markiert werden da es die Überschrift ist.
Die zweite Zeile soll Variabel bleiben und immer um eins nach unten wandern.
So sieht es bis jetzt aus:
Dim iRow
iRow = 2
Do Until IsEmpty(Cells(iRow, 1))
Worksheets("T_LW_Vorlage").Range("A1:Y1" & "A" & iRow, "Y" & iRow).copy
Workbooks.Add
ActiveSheet.Paste
Zellname = Cells(iRow, 1).Value
ChDir (ThisWorkbook.Path & "\" & Datum)
ActiveWorkbook.SaveAs Filename:=Zellname
ActiveWindow.Close
iRow = iRow + 1
Loop
Wie muss die 4te Zeile richtig lauten?
Vielen Dank für die Mühen!!
steffen

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Zeilen Makieren ( mit Variable )
28.12.2007 11:09:00
Holger
Hallo Steffen,
z.B.
Dim iRow
Set Überschrift = Application.Range(Worksheets("T_LW_Vorlage").Cells(1, 1), _
Worksheets("T_LW_Vorlage").Cells(1, 25))
iRow = 5
Do Until IsEmpty(Cells(iRow, 1))
Set Zeile = Application.Range(Worksheets("T_LW_Vorlage").Cells(iRow, 1), _
Worksheets("T_LW_Vorlage").Cells(iRow, 25))
Set newRange = Application.Union(Überschrift, Zeile)
newRange.Select
Workbooks.Add
ActiveSheet.Paste
Zellname = Cells(iRow, 1).Value
ChDir (ThisWorkbook.Path & "\" & Datum)
ActiveWorkbook.SaveAs Filename:=Zellname
ActiveWindow.Close
iRow = iRow + 1
Loop

Anzeige
AW: Mehrere Zeilen Makieren ( mit Variable )
28.12.2007 11:34:06
steffen
besten dank!!!! Es klappt mal wieder wunderbar!!! :-)
jetzt kann ich wieder beim Chef glänzen ;-)
dank dir!

AW: Mehrere Zeilen Makieren ( mit Variable )
28.12.2007 11:51:00
Erich
Hallo Steffen,
vielleicht ist das eine Alternative:

Option Explicit
Sub tst()
Dim iRow As Long, Datum As String
Datum = Format(Date, "dd.mm.yyyy")        ' wenn es das heutige Datum sein soll
With Worksheets("T_LW_Vorlage")
iRow = 5
Do Until IsEmpty(Cells(iRow, 1))
Workbooks.Add xlWBATWorksheet       ' neue Mappe mit 1 leerem Tabellenblatt
.Range(.Cells(1, 1), .Cells(1, 25)).Copy Cells(1, 1)        ' Überschrift
.Range(.Cells(iRow, 1), .Cells(iRow, 25)).Copy Cells(2, 1)  ' Zeile
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Datum & "\" & .Cells(iRow, 1)
ActiveWorkbook.Close
iRow = iRow + 1
Loop
End With
End Sub

Nebenbei: Den Gebrauch von "Option Explicit" empfehle ich dir dringend. Ein Link dazu:
http://www.online-excel.de/excel/singsel_vba.php?f=4
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Mehrere Zeilen Makieren ( mit Variable )
28.12.2007 14:19:00
steffen
Danke! hab es direkt ersetzt ;-) ist doch etwas eleganter
bin noch auf das nächste Problem gestoßen
mein Code sieht wie folgt aus:
On Error Resume Next
With Worksheets("T_LW_Vorlage")
iRow = 2
Do Until IsEmpty(Cells(iRow, 1))
Workbooks.Add xlWBATWorksheet
.Range(.Cells(1, 1), .Cells(1, 25)).Copy Cells(1, 1) ' Überschrift
.Range(.Cells(iRow, 1), .Cells(iRow, 25)).Copy Cells(2, 1) ' Zeile
Dateiname = .Cells(2, 4).Value & " " & .Cells(2, 24).Value
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Datum & "\" & Dateiname
ActiveWorkbook.Close
iRow = iRow + 1
Loop
End With
Sheets("T_LW_Vorlage").Range("A1").Select
End Sub
Jetzt muss ich allerdings noch bei den Zeilen eine Änderung rein bauen.
In der Spalte 24 steht eine VL Nummer. Alle Zeilen mit der gleichen VL Nummer sollen in die neue Mappe mit übernommen werden.
Ist das ohne großen Aufwand Möglich?
Danke!
steffen

Anzeige
AW: Mehrere Zeilen kopieren
28.12.2007 15:32:59
Erich
Hallo Steffen,
da stellen sich mir ein paar Fragen:
1. Wofür ist "On Error Resume Next" gut? (So würde ich das nie verwenden.)
2. Woher kommt bei dir der Wert von "Datum"?
3. In der Zeile
Dateiname = .Cells(2, 4) & " " & .Cells(2, 24)
wird der Dateiname aus D2 und X2 des Blattes T_LW_Vorlage erzeugt.
Er ändert sich nicht, egal, welche Zeile iRow gerade bearbeitet wird,
es wird also immer wieder unter dem selben Namen gespeichert.
Meinst du das vielleicht ohne die Punkte vor Cells?
Dateiname = Cells(2, 4) & " " & Cells(2, 24)
Dann würden die Zellen D2 und X2 des jeweils aktuellen Blattes verwendet.
4. Verstehe ich das richtig, dass jetzt nicht mehr die Überschrift und eine einzelne Zeile
in einer neuen Mappe gespeichert werden soll, sondern jeweils die Überschrift und
eine Gruppe von Zeilen mit gleicher VL-Nummer (in Spalte X)?
Ist dafür das Quellblatt nach Spalte X sortiert?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Mehrere Zeilen kopieren
28.12.2007 18:46:33
steffen
1. Das habe ich verwendet wenn die Datei schon existiert und man dann auch "nicht ersetzen" klickt..
2. Datum = Format(Date, "YYYY-MM-DD")
3. den Punkt hab ich nachträglich hinzugefügt, war mir aber über die Auswirkungen nicht bewußt.
und den Rest hast du genau richtig verstanden !! :-) hoffe ich hab mich nicht zu schwer ausgedrückt..
danke nochmals, funktioniert alles Super

AW: Mehrere Zeilen Makieren ( mit Variable )
28.12.2007 15:54:00
Erich
Hi Steffen,
hier meine neue Version:

Option Explicit
Sub tst3()
Dim iRow As Long, Datum As String, lngP As Long
Datum = Format(Date, "dd.mm.yyyy")        ' wenn es das heutige Datum sein soll
With Worksheets("T_LW_Vorlage")
.Select
iRow = 2
Do Until IsEmpty(Cells(iRow, 1))
Workbooks.Add xlWBATWorksheet       ' neue Mappe mit 1 leerem Tabellenblatt
.Range(.Cells(1, 1), .Cells(1, 25)).Copy Cells(1, 1)              ' Überschrift
lngP = 0                            ' Anzahl Zeilen bestimmen
While .Cells(iRow, 24) = .Cells(iRow + lngP + 1, 24)
lngP = lngP + 1
Wend
.Range(.Cells(iRow, 1), .Cells(iRow + lngP, 25)).Copy Cells(2, 1) ' Zeile(n)
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Datum & "\" & _
Cells(2, 4) & " " & Cells(2, 24)
ActiveWorkbook.Close
iRow = iRow + lngP + 1
Loop
End With
Cells(1, 1).Select
End Sub

Beantwortest du mir trotzdem noch die Fragen in meinem anderen Beitrag?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Mehrere Zeilen Makieren ( mit Variable )
28.12.2007 18:36:00
steffen
DANKE
ich hab bis jetzt immer ohne Option Explicit gearbeitet, aber ich sollte mich mal dazu durchringen...
mfg steffen

AW: Zeilen in neue Mappen kopieren
28.12.2007 19:39:18
Erich
Hi Steffen,
und hier die Version 4, mit "On Error Resume Next" (und "On Error GoTo 0"):

Option Explicit
Sub tst4()
Dim iRow As Long, lngP As Long
With Worksheets("T_LW_Vorlage")
.Select
.Cells(1, 1).Select
iRow = 2
Do Until IsEmpty(.Cells(iRow, 1))
Workbooks.Add xlWBATWorksheet       ' neue Mappe mit 1 leerem Tabellenblatt
.Range(.Cells(1, 1), .Cells(1, 25)).Copy Cells(1, 1)              ' Überschrift
lngP = 0                            ' Anzahl Zeilen bestimmen
While .Cells(iRow, 24) = .Cells(iRow + lngP + 1, 24)
lngP = lngP + 1
Wend
.Range(.Cells(iRow, 1), .Cells(iRow + lngP, 25)).Copy Cells(2, 1) ' Zeile(n)
On Error Resume Next
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Format(Date, "yyyy-mm-dd") & _
"\" & Cells(2, 4) & " " & Cells(2, 24)
On Error GoTo 0
ActiveWorkbook.Close
iRow = iRow + lngP + 1
Loop
End With
End Sub

Damit kann man ohne Fehler beim SaveAs auf Nein bzw. Abbrechen klicken.
Wenn man auch beim Close auf Abbrechen klickt, bleibt die jeweilige neue Mappe eben offen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Zeilen in neue Mappen kopieren
29.12.2007 14:27:30
steffen
hab das ganze mal Probiert, aber ich bekomme auf Nein sowie Abbrechen noch den
Laufzeitfehler 1004
Die Methode SaveAs für das Objekt Workbook ist fehlgeschlagen
mhh in der Firma arbeite ich mit 2000 hier allerdings mit 2007.
Ich weiß nicht ob das was zu sagen hat.

AW: Zeilen in neue Mappen kopieren
29.12.2007 18:38:33
Erich
Hi Steffen,
das mit dem Fehler 1004 verstehe ich nicht - dafür stand vor dem SaveAs doch "On Error Resume Next".
Besser ist es ohnehin, ohne diese Fehlersteuerung auszukommen.
Ob unter dem Namen schon eine Datei existiert, kann man vor dem Speicherversuch prüfen.
Das macht die Version 5:

Option Explicit
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" _
(ByVal PFAD As String) As Long
Sub tst5()
Dim iRow As Long, lngP As Long, strN As String, intE As Integer, strPath As String
strPath = ThisWorkbook.Path & "\" & Format(Date, "yyyy-mm-dd") & "\"
If MakeSureDirectoryPathExists(strPath) = 0 Then
MsgBox "Das Verzeichnis" & vbLf & strPath & vbLf _
& "konnte nicht erstellt werden!", vbCritical, "Abbruch"
Exit Sub
End If
With Worksheets("T_LW_Vorlage")
.Select
.Cells(1, 1).Select
iRow = 2
Do Until IsEmpty(.Cells(iRow, 1))
Workbooks.Add xlWBATWorksheet       ' neue Mappe mit 1 leerem Blatt
.Range(.Cells(1, 1), .Cells(1, 25)).Copy Cells(1, 1)              ' Überschrift
lngP = 0                            ' Anzahl Zeilen bestimmen
While .Cells(iRow, 24) = .Cells(iRow + lngP + 1, 24)
lngP = lngP + 1
Wend
.Range(.Cells(iRow, 1), .Cells(iRow + lngP, 25)).Copy Cells(2, 1) ' Zeile(n)
'                                   ' speichern
strN = strPath & Cells(2, 4) & " " & Cells(2, 24)
If UCase(Right(strN, 4))  ".xls" Then strN = strN & ".xls"
If Dir(strN) > "" Then
intE = MsgBox(strN & vbLf & "existiert bereits." & vbLf & vbLf _
& "Soll die Datei überschrieben werden?", vbYesNoCancel + vbQuestion)
Select Case intE
Case vbYes
Kill strN
ActiveWorkbook.SaveAs strN
ActiveWorkbook.Close
Case vbCancel
Exit Sub
Case Else ' bei "Nein" wird die Mappe nicht gespeichert und bleibt offen
End Select
Else
ActiveWorkbook.SaveAs strN
ActiveWorkbook.Close
End If
iRow = iRow + lngP + 1
Loop
End With
End Sub

Das kannst du gleich in der Mappe ausprobieren:
https://www.herber.de/bbs/user/48698.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige