Das Archiv des Excel-Forums

For each - Next

Bild

Betrifft: For each - Next
von: Torsten K.

Geschrieben am: 25.09.2003 12:22:08

Hallo beisammen,

als VBA-Anfänger brauche ich mal die Hilfe des Profis:
In einer Datei (Quelldate) befinden sich 17 Worksheets ("1" - "17"), die alle den gleichen Aufbau haben. Ist der Wert der Zelle "F3" ungleich 0, soll eine bereits vorhandene Datei (Zieldatei) geöffnet und unter dem Namen aus "G1" des WS gespeichert werden (DateiNeu). Das soll für alle 17 WS so durchlaufen werden.

Private Sub cmb_COPA_Click()
Dim ws
Dim Arr, i%
Dim wkbQuell As Workbook 'Quelldatei
Dim wkbZiel As Workbook  'Datei: Upload_blanco
Dim wkbNeu As Workbook   'neue Datei nach Speichern der wbkZiel unter neuem Namen
Dim fi As String
Set wkbQuell = ThisWorkbook
fi = ThisWorkbook.Range("G1")
If GetPassword = True Then
Application.ScreenUpdating = False
Arr = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", _
"10", "11", "11", "12", "13", "14", "15", "16", "17")
For i = LBound(Arr, 1) To UBound(Arr, 1)
Next i
For Each ws In Arr
Worksheets(ws).Activate
If ws.Range("F3") <> 0 Then
Workbooks.Open Filename:= _
"Y:\Budget 2004\Turnover\COPA_Preparation\Upload_Test.xls", UpdateLinks:=3
ActiveWorkbook.SaveAs Filename:= _
"Y:\Budget 2004\Turnover\COPA_Upload\" & fi, FileFormat:=xlNormal, Password:="", _
WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
Next ws
Else
MsgBox "Password ist falsch"
End If
Application.ScreenUpdating = True
End Sub

Leider erhalte ich an der Stelle "Next ws" die Meldung "Next ohne For" - ich verstehe's nicht, da "For each ws.." doch definiert ist?
Kann mir jemand helfen. Vielen Dank im voraus.

Gruß
Torsten
Bild


Betrifft: AW: For each - Next
von: GerdW
Geschrieben am: 25.09.2003 12:30:05

Wozu soll das gut sein?

For i = LBound(Arr, 1) To UBound(Arr, 1)
Next i

Gerd


Bild


Betrifft: AW: For each - Next
von: PeterW
Geschrieben am: 25.09.2003 12:30:41

Hallo Torsten,

die Meldung kommt, da der Code noch kein End If gefunden hat. Stell das mal so um:

For Each ws In Arr
Worksheets(ws).Activate
If ws.Range("F3") <> 0 Then
Workbooks.Open Filename:= _
"Y:\Budget 2004\Turnover\COPA_Preparation\Upload_Test.xls", UpdateLinks:=3
ActiveWorkbook.SaveAs Filename:= _
"Y:\Budget 2004\Turnover\COPA_Upload\" & fi, FileFormat:=xlNormal, Password:="", _
WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False

Else
MsgBox "Password ist falsch"
End If

Next ws

Gruß
Peter


Bild


Betrifft: AW: For each - Next
von: xXx
Geschrieben am: 25.09.2003 12:34:55

Hallo,
das geht so nicht.
Was soll die For i=Schleife?

For ws = LBound(Arr, 1) To UBound(Arr, 1)
Worksheets(ws).Activate
If ws.Range("F3") <> 0 Then
Workbooks.Open Filename:= _
"Y:\Budget 2004\Turnover\COPA_Preparation\Upload_Test.xls", UpdateLinks:=3
ActiveWorkbook.SaveAs Filename:= _
"Y:\Budget 2004\Turnover\COPA_Upload\" & fi, FileFormat:=xlNormal, Password:="", _
WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
Next ws

Gruß aus'm Pott
Udo


Bild


Betrifft: vor Next ws gehört noch ein End If oT
von: xXx
Geschrieben am: 25.09.2003 12:37:25




Bild


Betrifft: AW: For each - Next
von: Torsten K.
Geschrieben am: 25.09.2003 13:31:43

Hallo zusammen,

vielen Dank für Eure Hinweise. Ich habe ein "End If" vor das "Next ws" gestellt. Leider bleibt Excle jetzt woanders hängen, und zwar bei "fi=ThisWorkbook.Range("G3")" (=>Objekt unterstützt Eigenschaft oder Methode nicht):

Dim fi as String
fi = ThisWorkbook.Range("G1")

If GetPassword = True Then

Application.ScreenUpdating = False

Arr = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", _
"10", "11", "11", "12", "13", "14", "15", "16", "17")
'For i = LBound(Arr, 1) To UBound(Arr, 1)
'Next i

For Each ws In Arr
Worksheets(ws).Activate
If ws.Range("F3") <> 0 Then
Workbooks.Open Filename:= _
"Y:\Budget 2004\Turnover\COPA_Preparation\Upload_Test.xls", UpdateLinks:=3
ActiveWorkbook.SaveAs Filename:= _
"Y:\Budget 2004\Turnover\COPA_Upload\" & fi, FileFormat:=xlNormal, Password:="", _
WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
End If
Next ws

Könnt Ihr mir hier auch weiterhelfen? Vielen Dank.

Gruß
Torsten


Bild


Betrifft: AW: For each - Next
von: PeterW
Geschrieben am: 25.09.2003 13:34:46

Hallo Torsten,

fi = ThisWorkbook.Sheets(WelchesBlatt").Range("G1")

Gruß
Peter


Bild


Betrifft: AW: For each - Next
von: Torsten K.
Geschrieben am: 25.09.2003 13:52:31

Hallo Peter,

nett, daß Du Dich meinem Problem annimmst.
Wie muß ich Deinen Code denn anpassen, wenn ich berücksichtige, daß Sheets doch 17 verschiedene WS sind, die nacheinander abgearbeitet werden sollen (wie im Array angegeben)?

Gruß
Torsten


Bild


Betrifft: AW: For each - Next
von: PeterW
Geschrieben am: 25.09.2003 13:57:44

Hallo Torsten,

in der For Each Schleife machst du das doch richtig mit ws.Range("F3")...

Würde dir gerne helfen aber kann nicht nachvollziehen, was du mit fi überhaupt vor hast? Die Variable taucht im Code nicht wieder auf.

Gruß
Peter


Bild


Betrifft: AW: For each - Next
von: Torsten K.
Geschrieben am: 25.09.2003 14:59:26

Hallo Peter,

ich hab' ein bißchen weiterprobiert und nunmehr folgenden Code erstellt:

Private Sub cmb_COPA_Click()
Dim ws
Dim Arr, i%
Dim wkbQuell As Workbook 'Quelldatei
Dim wkbZiel As Workbook  'Datei: Upload_blanco
Dim wkbNeu As Workbook   'neue Datei nach Speichern der wbkZiel unter neuem Namen
Dim fi As String
Set wkbQuell = ThisWorkbook
If GetPassword = True Then
Arr = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", _
"10", "11", "11", "12", "13", "14", "15", "16", "17")
For Each ws In Arr
Worksheets(ws).Activate
If ThisWorkbook.Sheets(ws).Range("F3") <> 0 Then
fi = ThisWorkbook.Sheets(ws).Range("G1")
Workbooks.Open Filename:= _
"Y:\Budget 2004\Turnover\COPA_Preparation\Upload_Test.xls", UpdateLinks:=3
ActiveWorkbook.SaveAs Filename:= _
"Y:\Budget 2004\Turnover\COPA_Upload\" & fi, FileFormat:=xlNormal, Password:="", _
WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
'=> Code für: neu erstellte Datei schließen
Else
End If
Next ws
Else
MsgBox "Password ist falsch"
End If
End Sub

Im ersten Durchgang läuft der Code auch richtig: Es wird eine neue Datei erstellt, die unter dem Namen aus der Zelle G1 des WS aus Quelldatei gespeichert wird. Den 2. Durchgang bricht Excel mit Fehlermeldung ("Index außerhalb des gültigen Bereichs") ab und markiert die Stelle "Worksheets(ws).Activate". Weißt Du Rat?
Wie muß der Code aussehen, wenn ich die gerade erstellte Datei schließen möchte, bevor der nächste Durchgang beginnt? Mit ThisWorkbook.Close oder ActiveWorkbook.Close schließt mir Excel die Quelldatei und bricht damit natürlich mittendrin ab.
Vielen Dank für Deine Geduld und Hilfe.

Gruß
Torsten


Bild


Betrifft: AW: For each - Next
von: PeterW
Geschrieben am: 25.09.2003 16:11:03

Hallo Torsten,

das neu erstellte Datei ist das ActiveWorkbook. Also nach dem SaveAs AvtiveWorkbook.Close

Allerdings verstehe ich nicht, dass das Makro einmal komplett durchlaufen soll. Spätestens beim 2. Versuch die Mappe mit dem Namen aus Worksheet("11") zu speichern sollte es eine Warnmeldung geben.

Gruß
Peter


Bild


Betrifft: AW: For each - Next
von: Torsten K.
Geschrieben am: 25.09.2003 16:51:48

Hallo Peter,

sorry, ich hab' mich wohl mißverständlich ausgedrückt. Das Makro läuft nicht komplett durch, sondern kommt mit der Fehlermeldung, nachdem die 1. Datei mit dem Namen aus der Zelle "G1" des 1. WS neu angelegt wurde (Es sollen ja u.U. 17 Datein neu angelegt werden). Was fehlt dem Code denn noch oder wo mach ich was falsch, das das makro abbricht und nicht komplett durchläuft?

Gruß
Torsten
P.S. Ich bin gleich nicht mehr im Büro. Kann ich Dich morgen im Forum direkt anpsprechen oder können wir unter dem aktuellen Thread weiter kommunizieren? Gib mir bitte einen Tipp.


Bild


Betrifft: AW: For each - Next
von: PeterW
Geschrieben am: 25.09.2003 17:08:44

Hallo Torsten,

es ist besser im Thread zu bleiben. Es ist allerdings zu vermuten, dass dies ein ziemlich umfangreicher wird, bis alle Details geklärt sind. Mein Vorschlag: mail mich direkt an unter peter.wunderlich@gmx.net und die Lösung stellen wir ins Forum, wenn wir sie gefunden haben.

Gruß
Peter


Bild


Betrifft: fürs Archiv
von: PeterW
Geschrieben am: 30.09.2003 00:24:07

Um diesen Thread zu einem Ende zu bringen:

Das Problem ist aus der Welt aber fürs Archiv uninteressant, da es sich um eine seeehr spezielle Anwendung handelt. Es gab Detailprobleme mit geschützten Blättern, die gelöscht werden sollten, mit Sortierfunktionen und dem grundsätzlichen Schleifenaufbau.


 Bild