Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Loops für die Auswahl der Zellen einer Spalte und Vergabe der Dateinamen
#1
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)
Antworten Top
#2
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
Gruß der AlteDresdner (Win11, Off2021)
[-] Folgende(r) 1 Nutzer sagt Danke an AlterDresdner für diesen Beitrag:
  • chilly_bang
Antworten Top
#3
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • chilly_bang
Antworten Top
#4
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 :(
Antworten Top
#5
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
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?
Antworten Top
#7
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste