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

Zeitbedarf zum Schreiben

Zeitbedarf zum Schreiben
27.02.2007 07:50:00
Frank
Hallo Cracks,
folgendes "Problem":
ich lese per Schleife aus verschiedenen Tabellenblättern ca. 800 Werte in Variablen ein. Das dauert so ca. 1-2 Sekunden. Um einen Serienbrief zu füllen schreibe ich diese Werte in eine neue und unformatierte Tabelle - das dauert dann 30 Sekunden wobei das Speichern der Datei ebenfalls nur eine Sekunde dauert.
Woran liegt das, wie kann dieser Vorgang beschleunigt werden?
1000 Dank - Frank

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeitbedarf zum Schreiben
27.02.2007 07:54:33
Heiko
Hallo Frank,
also ich denke in Zeile 27 deines Codes müßtest du noch was tun, da scheint es zu hängen.
Ach ja und die Variablendeklaration ist auch nicht ganz schlüssig.
Für weitere Analysen fehlen mir leider die Zugriffsrechte auf deine Rechner um mir den Code anschauen zu können.
Oder auf deutsch, wo ist der Code der Probleme macht !!!
Gruß Heiko
AW: Zeitbedarf zum Schreiben
27.02.2007 08:15:00
Frank
Na klar...

Sub WerteSchreiben(Anzahl)
ScreenUpdating = False
Call ÜbersichtErstellen(Anzahl) 'Blatt erstellen 'Leeres Blatt erstellen, Überschriften _
schreiben
For i = 1 To Anzahl
Info.Label1 = "Wertliste für " & Azubi(i, 0) & " wird geschrieben"
Info.Label2 = "Einen Moment bitte..."
Info.Show (0)
DoEvents
If Azubi(i, 4) = "" Then
Azubi(i, 8) = "n.f."
Else
Azubi(i, 8) = Azubi(i, 5) / Azubi(i, 4)
End If
If Azubi(i, 6) = "" Then
Azubi(i, 9) = "n.f."
Else
Azubi(i, 9) = Azubi(i, 7) / Azubi(i, 6)
End If
'Schreiben Azubidaten
For j = 0 To 9
Cells(i + 1, j + 1) = Azubi(i, j)
Next j
For j = 10 To 130
If Azubi(i, j) <> "" Then Cells(i + 1, j + 1) = Azubi(i, j)
Next j
For j = 131 To 250
If Azubi(i, j) <> "" Then Cells(i + 1, j + 1) = Azubi(i, j)
Next j
Cells(i + 1, 251) = Azubi(i, 251)
Next i
End Sub

Ich habs über Time abgefragt, dieser Code benötigt ca 30 sek zur Bearbeitung
Anzeige
Weitere Ideen gefragt !!!
27.02.2007 09:12:00
Heiko
Hallo Frank,
komisch aber das kriege ich auch nicht schneller.
Habe zuerst gedacht deine Userform bremst das aus, aber trotz auskommentieren der Zeilen zum Userform und DoEvents, hatte ich keinen Zeitvorteil.
Dann habe ich versucht erstmal alles in ein Array zu schreiben und dann das Array in einem Schlag dem Blatt zuzuweisen, das hat sogar länger gedauert als mit der Schleife.
Ich bin mit meinen Ideen am Ende, aber es gibt ja noch andere die vielleicht des Rätsels Lösung wissen.
Gruß Heiko
AW: Weitere Ideen gefragt !!!
27.02.2007 09:37:00
Frank
Hallo Heiko,
naja, vielleicht ist es auch einfach so. Die 30 sek. hatte ich auch ohne die "" -Abfrage in den beiden J-Schleifen, also wenn alle 2250 Zellen (auch mit leeren Variablen) gefüllt werden.
Es hat mich nur gewundert und ich dachte es gibt da einen Trick...
Trotzdem Danke für die Mühe!
Frank
Anzeige
AW: Zeitbedarf zum Schreiben
27.02.2007 09:37:00
ingoG
Hallo Frank,
1. Du überschreibst immer die letzte Spalte (251) jeder Zeile mit dem wert azubi(i,251) nachdem du vorher azubi(i,250) dort hineingeschrieben hast (ich nehme einfach mal an, dass Du die info eine Spalte weiter schreiben möchtest...
2. Ausserdem nimmt die ganze info-geschichte bestimmt auch einiges an Zeit in Anspruch
3. was soll denn passieren, wenn ein Eintrag in Deinem Array = "" ist?
stehen in Deiner Tabelle schon werte, die dann übernommen werden sollen oder ist die Tabelle leer und Du willst nur den Schreibvorgang sparen...
im 2. Fall geht die ganze Sache wahrscheinlich viel schneller mit:

Sub WerteSchreiben(Anzahl)
ScreenUpdating = False
Call ÜbersichtErstellen(Anzahl) 'Blatt erstellen 'Leeres Blatt erstellen, Überschriften _
schreiben
For i = 1 To Anzahl
'    Info.Label1 = "Wertliste für " & Azubi(i, 0) & " wird geschrieben"
'    Info.Label2 = "Einen Moment bitte..."
'    Info.Show (0)
DoEvents
If Azubi(i, 4) = "" Then
Azubi(i, 8) = "n.f."
Else
Azubi(i, 8) = Azubi(i, 5) / Azubi(i, 4)
End If
If Azubi(i, 6) = "" Then
Azubi(i, 9) = "n.f."
Else
Azubi(i, 9) = Azubi(i, 7) / Azubi(i, 6)
End If
Next
range(Cells(2,11),cells(anzahl+1,252))=azubi
End Sub

Gruß Ingo
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige