Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1332to1336
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
Inhaltsverzeichnis

Langsamer durch neue Version? Abhilfe?

Langsamer durch neue Version? Abhilfe?
24.09.2013 10:47:52
Claus
Liebe Excelianer,
meine Firma ist kürzlich auf Office 2010 umgestiegen.
Ich habe vor langer Zeit mal einen Makro geschrieben, der mehrere Tausend (momentan 6062) Textdateien erzeugt. Wichtig ist dabei nur der Dateiname, der eine Materialnummer und einen Verweis (Info) enthält. Die 6062 Zeilen erhalte ich aus SAP, der Makro geht diese durch und erzeugt jeweils diese kleine Textdatei ohne Text, also nur Dateiname.
Früher war das immer innerhalb der Mittagspause der Kollegin, die das laufen lassen muss, abgebacken.
Nun dauert es den ganzen Tag und ist dann immer noch nicht fertig. Kann das durch die neue Version kommen? Gibt es da eine Abhilfe, also einen Beschleunigungstrick?
Vielen Dank und liebe Grüße
Claus

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

Betreff
Datum
Anwender
Anzeige
AW: Langsamer durch neue Version? Abhilfe?
24.09.2013 11:19:45
selli
hallo claus,
wie soll hier jemand wissen wo anzusetzen ist ohne das makro zu sehen?
grundsätzlich würde ich sagen, es liegt nicht an der neuen version.
gruß
selli

bisheriger Code?
24.09.2013 11:23:27
Erich
Hi Claus,
was kann denn da so lange dauern? Die Anlage von ein paar Tausend leeren Dateien sollte doch flott gehen.
Um sagen zu können, was man vielleicht verbessern könnte, müsste man wissen, wie du das bisher machst.
Zeigst du uns deinen Code?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: bisheriger Code?
24.09.2013 11:24:38
Claus
Hallo selli, hallo Erich,
vielen Dank für die Anmerkung. Ihr habt recht. Hier mal die entsprechenden Codezeilen, wo es sehr langsam wird:
For Zeilenzähler = 4 To letzteZeile + 3
' Datei nicht erzeugen wenn nur - oder nur OZ
ActiveCell.Offset(0, -1).Range("A1").Select
Dateinam = Selection
ActiveCell.Offset(0, 1).Range("A1").Select
If Dateinam = "-" Then GoTo 150
If Dateinam = "OZ" Then GoTo 150
'Selection.Copy
Dateinam = Selection
' neue Datei erzeugen und unter gewünschtem Namen speichern
Workbooks.Add
ActiveWorkbook.SaveAs Filename:= _
Dateinam, _
FileFormat:=xlText, CreateBackup:=False
'ActiveWorkbook.Close SaveChanges:=True
ActiveWorkbook.Close SaveChanges:=False
' 1 runter
150
ActiveCell.Offset(1, 0).Range("A1").Select
Next Zeilenzähler

Anzeige
AW: bisheriger Code?
24.09.2013 12:00:19
selli
hallo claus,
mal etwas gekürzt und ohne select:
For Zeilenzähler = 4 To letzteZeile + 3
If Cells(Zeilenzähler, 1) = "-" Or Cells(Zeilenzähler, 1) = "OZ" Then
Else
Dateinam = Cells(Zeilenzähler, 1)
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=Dateinam, FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Close SaveChanges:=False
End If
Next Zeilenzähler
gruß
selli

dateiname in B
24.09.2013 12:09:12
selli
hallo claus,
wenn der neue dateiname in spalte B steht, dann natürlich so:
For Zeilenzähler = 4 To letzteZeile + 3
If Cells(Zeilenzähler, 1) = "-" Or Cells(Zeilenzähler, 1) = "OZ" Then
Else
Dateinam = Cells(Zeilenzähler, 2)
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=Dateinam, FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Close SaveChanges:=False
End If
Next Zeilenzähler
gruß
selli

Anzeige
Mappen sind Overhead
24.09.2013 12:41:00
Erich
Hi Claus,
um eine leere Datei zu erzeugen, muss man doch keine Excelmappe anlegen.
0 Byte sind 0 Byte, ob die Datei keinen Text oder keine Grafikpixel oder keine ... enthält, ist egal.
Damit dauert das Anlegen von 6000 Dateien ca. 1 Sekunde:

Option Explicit
Sub TxtAnleg()
Dim letzteZeile As Long, arrQ, iKan As Integer
Dim zz As Long, Dateinam As String
ChDrive "C"
ChDir "C:\temp"
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row - 3
arrQ = Cells(4, 1).Resize(letzteZeile)
Close
iKan = FreeFile(1)
For zz = 1 To letzteZeile
Dateinam = arrQ(zz, 1)
' Datei nicht erzeugen wenn nur - oder OZ
If Dateinam = "-" Or Dateinam = "OZ" Then
Else
Open Dateinam For Output As #iKan
Close #iKan
End If
Next zz
End Sub

Das Löschen im Windows Explorer dauert länger...
Nicht so ganz klar ist, wo genau die Dateinamen in der Tabelle stehen.
Dein Code startet bei einer "ActiveCell" - das kann irgend wo sein...
Bedeutet der Beginn der Schleife bei 4, dass in den Zeilen 1 bis 3 andere Werte, etwa Überschrften, stehen?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Mappen sind Overhead
24.09.2013 12:58:33
Claus
Hallo selli, hallo Erich,
huch, ich ziehe den Hut, Erich kann Gedanken lesen. Deine Vermutung stimmt exakt.
An selli: Sorry, ich verfolge mal Erichs Ansatz weiter, der erscheint mir einfach besser. Trotzdem ein ehrliches Dankeschön für deine posts.
Erich: Also, ich glaube ich baue einfach in einem zusätzlichen Bereich (Spalte A) die zu speicherneden Dateinamen auf (dabei kann ich ja schon die auszulassenden Minus und OZ übergehen). Dann deine Schleife in abgewandelter Form...
Habe aber eigentlich keine Zeit, werde mich aber in jedem Fall zurückmelden, ob und wie ich weiter komme.
Liebe Grüße
Claus

Anzeige
neue Version
24.09.2013 13:26:12
Erich
Hi Claus,
was den Ausschluss deer OV und - betrifft, habe ich mich wohl etwas vertan.
Ist es so, dass in Spalte A OV, - oder etwas anderes steht und in Spalte B die Dateinamen stehen?
Das habe ich wegen der Offsets nicht richtig mitbekommen...
Hier eine neue Version:

Option Explicit
Sub TxtAnleg()
Dim letzteZeile As Long, arrQ, iKan As Integer, zz As Long
ChDrive "C"
ChDir "C:\temp"
letzteZeile = Cells(Rows.Count, 2).End(xlUp).Row - 3
' In Spalte A stehen Texte, z. B. "OZ" oder "-" oder andere oder nichts
' In Spalte B stehen Dateinamen xxxxxx.txt
arrQ = Cells(4, 1).Resize(letzteZeile, 2)          ' ab 4. Zeile
Close
iKan = FreeFile(1)
For zz = 1 To letzteZeile
' Datei nicht erzeugen wenn - oder OZ in Spalte A
If arrQ(zz, 1) = "-" Or arrQ(zz, 1) = "OZ" Then
Else
Open arrQ(zz, 2) For Output As #iKan  ' Dateiname in Sp. B
Close #iKan
End If
Next zz
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: neue Version
24.09.2013 13:29:04
Claus
Nein, das ist schon o.k. mit den Ausschlüssen. Ich bin jetzt doch dran... (mein Chef darf es halt nicht sehen, Anderes wäre seiner Meinung nach wichtiger)

AW: neue Version * Erfolg!*
24.09.2013 16:45:34
Claus
Erfolgsmeldung...
tja, irgendwie muss man nur die richtigen Leute (das richtige Forum) fragen...
Also der Vorgang dauerte vorher etwa 40 Minuten (war o.k. da innerhalb Mittagspause der guten Frau), jetzt hatte ich entsprechend durchgetestet und startete den Gesamtlauf mit 6062 abzuarbeitenden Zeilen...
Nach dem Start des Makros wollte ich gerade die Uhrzeit notieren, da schau ich hin und es ist fertig! 10 Sekunden oder so. Echt cool. Und Speicherplatz ist auch noch gespart, weil es ja ein Unterschied zwischen leerem Text und ohne Text gibt, oder? So ganz kapiere ich es nicht.
Drum vielen herzlichen Dank und liebe Grüße
Claus

Anzeige
per CreateTextFile
24.09.2013 17:15:23
Rudi
Hallo,
Sub CreateTxtFile()
Dim fs As Object, a As Object
Dim arr, i As Integer
arr = Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp)).Resize(, 2)
Set fs = CreateObject("Scripting.FileSystemObject")
For i = 1 To UBound(arr)
If arr(i, 1) = "OZ" Or arr(i, 1) = "-" Then
Else
Set a = fs.CreateTextFile("c:\test\" & arr(i, 2) & ".txt", True)
a.Close
End If
Next i
End Sub

Gruß
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige