Clever-Excel-Forum

Normale Version: Loops für die Auswahl der Zellen einer Spalte und Vergabe der Dateinamen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi!
ich habe son Makro, das die Formeln aus jeder nächster Zelle einer Spalte nimmt, eine neue Datei erstellt, die kopierte Formel in A1 der neuen Datei einsetzt, die Formel berechnet (die Berechnung wurde auf manuell gestellt, damit die Formeln in der Quellen-Spalte nicht gleich losberechnet werden), die Datei speichert, und von vorne anfängt:
Code:
Sub Makro1()
'
' Makro1 Makro
'
   Windows("macrotest.xlsx").Activate
   Range("A1").Select
   Selection.Copy
   Workbooks.Add
   ActiveSheet.Paste
   Application.CutCopyMode = False
    Calculate
   ActiveWorkbook.SaveAs Filename:= _
       "Z:\Mappe1.csv", FileFormat:=xlCSV, _
       CreateBackup:=False
        
  Windows("macrotest.xlsx").Activate    
    Range("A2").Select
   Selection.Copy
   Workbooks.Add
   ActiveSheet.Paste
   Application.CutCopyMode = False
     Calculate
   ActiveWorkbook.SaveAs Filename:= _
       "Z:\Mappe2.csv", FileFormat:=xlCSV, _
       CreateBackup:=False

   Windows("macrotest.xlsx").Activate
   Range("A3").Select
   Selection.Copy
   Workbooks.Add
   ActiveSheet.Paste
   Application.CutCopyMode = False
   Calculate
   ActiveWorkbook.SaveAs Filename:= _
       "Z:\Mappe3.csv", FileFormat:=xlCSV, _
       CreateBackup:=False
        
End Sub


ich habe 90 Formeln und würde ungerne das Code-Snippet 90 Mal wiederholen. Die Frage ist: wie würden zwei Loops für dieses Makro aussehen:
  • das eine Loop würde die Zellen aus dem Bereich A1-A90 nehmen
  • das zweite Loop würde erstellte Dateien beim Speichern benennen (egal wie, 1.csv bis 90.csv passen auch)
Hallo chilly_bang,
ohne Test:
Sub MyMacro()
Dim i As Integer, myname As String
  myname = ThisWorkbook.Name
  For i = 1 To 90
    Windows(myname).Activate
    Range("A" & i).Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Calculate
    ActiveWorkbook.SaveAs Filename:= _
        "Z:\Mappe" & i & ".csv", FileFormat:=xlCSV, _
        CreateBackup:=False
    ActiveWorkbook.Close True 'schließt die erzeugte csv-Datei gleich
  Next i
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 14 - mit VBAHTML 12.6.0

Falls der dateiname Mappe... nicht passt, einfach im Code den Vorsatz Z:\Mappe ändern.
Gruß der AlteDresdner
Moin!
Getestet und ohne Windows-Objekt und ohne .Select / .Activate:

Sub RPP()
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To 90
   Tabelle1.Cells(i, 1).Copy
   With Workbooks.Add
      Cells(1).PasteSpecial xlPasteValues
      .SaveAs "J:\MeinPfad\Mappe" & i, xlCSV
      .Close False
   End With
Next
Application.CutCopyMode = False
End Sub

Gruß Ralf
Hi
Danke AlterDresdner und RPP63!

Die Macros funzen eigentlich so, wie gedacht, aber die Formeln werden nicht berechnet - in jeder gespeicherten Datei bekomme ich nur entweder die Formel in A1 oder anstelle der Formel #getting_data. 
I habe versucht ein timeout einzibinden, wie das hier: Application.Wait (Now + TimeValue("00:00:10")) - hat nichts gebracht.

Wißt ihr, wo das Problem liegt? Ich bin die ursprüngliche Prozedur manuell durchgegangen, bevor ich sie mit einem Macro automatisieren gedachte - und manuell wurde alles so kalkuliert, wie es sein sollte. Nur jetzt nicht :(
Moin!
Schau mal, ob das so funktioniert.
Man kann ja auch einzelne Zellen berechnen lassen.
.Wait wirst Du wohl nicht brauchen, da der Interpreter erst die Berechnung abwarten sollte.

Sub RPP()
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To 90
   With Tabelle1.Cells(i, 1)
      .Calculate
      .Copy
   End With
   With Workbooks.Add
      Cells(1).PasteSpecial xlPasteValues
      .SaveAs "J:\MeinPfad\Mappe" & i, xlCSV
      .Close False
   End With
Next
Application.CutCopyMode = False
End Sub

Gruß Ralf
wenn ich das Makro mit der Formelberechnung-Einstellung "automatisch" laufen lasse - bekomme ich die Dateien, wo nur unberechnete Formeln eingefügt sind. Wenn ich die Formelberechnung-Einstellung auf "manuell, beim Speichern neu berechnen" nutze, dann enthalten die Dateien anstatt Formeln #getting_data in A1, sonst nichts:(

Es scheint, dass im zweiten Fall die Zeit für die Berechnung nicht ausreicht, wie siehst du das?
Hallöchen,

man könnte dann ja mal schauen, ob eine Wartezeit wirklich etwas bringt. Ich würde dafür aber nicht Application.Wait nehmen, sondern die API sleep.
http://www.xltips.de/VBA-API.html