Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1172to1176
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

Export Code arbeit sehr langsam

Export Code arbeit sehr langsam
Maris
Hi Leute,
ich habe diesen Code in einer anderen Excelmappe mit sehr vielen Datensätzen verwendet und der Export der Daten ging immer sehr schnell... Nach Modifizierung und Einbindung in eine neue Arbeitsmappe dauer der Datenexport nun unwahrscheinlich lange. Weiß vielleicht jemand warum das so ist ein Export dauert ca. 20 Min.

Sub Export()
Dim ArrayÜberschrift(1 To 79) As Variant, ArrayWerte() As Variant
Dim x As Long, z As Long
Dim i As Long, y As Long, lngSpalte As Long
Dim rSuche As Range, rFinde As Range
With Application
.ScreenUpdating = False 'geänderte Daten werden nicht dargestellt, Bilschirm wird nicht  _
aktualisiert
.EnableEvents = False
.ActiveSheet.Unprotect
End With
Application.Windows.Arrange ArrangeStyle:=xlArrangeStyleTiled
Workbooks.Open Filename:="C:\Users\cmazilu\Arbeitsumgebung\Testing\Input.xls" ' Hier  Pfad _
anpassen z.B.Filename:="C: _
'Application.Windows.Arrange ArrangeStyle:=xlArrangeStyleTiled 'Fenster werden geteilt _
dargestellt
ThisWorkbook.Activate
For i = 1 To 79
ArrayÜberschrift(i) = ThisWorkbook.Sheets("Invoing_list").Cells(1, i + 1)
Next i
With Workbooks("Input.xls").Sheets("Invoing_list")
lz = ThisWorkbook.Sheets("Invoing_list").Cells(Rows.Count, "B").End(xlUp).Row 'sucht die  _
_
letzte benutzte Zeile in Spalte B
lz_input = .Cells(Rows.Count, "B").End(xlUp).Row 'sucht die letzte benutzte Zeile in _
Spalte B
Min = 2 'es wird erst in der 2. Reihe begonnen.
Set rFinde = .Range("A1:CA1")
For i = 1 To 79
Set rSuche = rFinde.Find(what:=ArrayÜberschrift(i), LookAt:=xlWhole, LookIn:= _
xlValues)
If Not rSuche Is Nothing Then
For x = 2 To lz
If ThisWorkbook.Sheets("Invoing_list").Cells(x, i + 1).EntireRow.Hidden =  _
False _
Then
ReDim Preserve ArrayWerte(y)
ArrayWerte(y) = ThisWorkbook.Sheets("Invoing_list").Cells(x, i + 1)
y = y + 1
End If
Next x
lngSpalte = rSuche.Column
For z = LBound(ArrayWerte()) To UBound(ArrayWerte())
.Cells(lz_input + z + Min, lngSpalte) = ArrayWerte(z)
Next z
End If
ReDim ArrayWerte(0)
y = 0
Next i
End With
Workbooks("Input.xls").save
Workbooks("Input.xls").Close
Set rSuche = Nothing
Set rFinde = Nothing
With Application
.ScreenUpdating = True
.EnableEvents = True
.ActiveSheet.Protect
End With
End Sub
Grüßle MAris
AW: Export Code arbeit sehr langsam
30.08.2010 14:46:41
Rudi
Hallo,
irgendwelche umfangreichen Berechnungen?
Diverse Schleifen brauchst du nicht. Geht auf einen Schlag.
Sub Export()
Dim ArrayÜberschrift As Variant, ArrayWerte() As Variant
Dim x As Long, z As Long
Dim i As Long, y As Long, lngSpalte As Long, lz As Long, lz_Input As Long, Min As Long
Dim rSuche As Range, rFinde As Range
Dim wksIn As Worksheet, wksOut As Worksheet
Dim intCalc As Integer
On Error GoTo ERRHANDLER
With Application
intCalc = .Calculation
.ScreenUpdating = False 'geänderte Daten werden nicht dargestellt, Bilschirm wird nicht  _
aktualisiert
.EnableEvents = False
.Calculation = xlCalculationManual
End With
ActiveSheet.Unprotect
Application.Windows.Arrange ArrangeStyle:=xlArrangeStyleTiled
Set wksIn = Workbooks.Open(Filename:="C:\Users\cmazilu\Arbeitsumgebung\Testing\Input.xls"). _
Sheets("Invoing_list") ' Hier  Pfad _
anpassen z.B.Filename:="C: _
'Application.Windows.Arrange ArrangeStyle:=xlArrangeStyleTiled 'Fenster werden geteilt _
dargestellt
Set wksOut = ThisWorkbook.Sheets("Invoing_list")
'ThisWorkbook.Activate
ArrayÜberschrift = wksOut.Range("B1:CB1")
ArrayÜberschrift = WorksheetFunction.Transpose(ArrayÜberschrift)
lz = wksOut.Cells(Rows.Count, "B").End(xlUp).Row 'sucht die letzte benutzte Zeile in Spalte B
With wksIn
lz_Input = .Cells(Rows.Count, "B").End(xlUp).Row 'sucht die letzte benutzte Zeile in Spalte  _
B
Min = 2 'es wird erst in der 2. Reihe begonnen.
Set rFinde = .Range("A1:CA1")
For i = 1 To 79
Set rSuche = rFinde.Find(what:=ArrayÜberschrift(i), LookAt:=xlWhole, LookIn:=xlValues)
If Not rSuche Is Nothing Then
For x = 2 To lz
If wksOut.Cells(x, i + 1).EntireRow.Hidden = False Then
ReDim Preserve ArrayWerte(y)
ArrayWerte(y) = wksOut.Cells(x, i + 1)
y = y + 1
End If
Next x
lngSpalte = rSuche.Column
.Cells(lz_Input + Min, lngSpalte).Resize(y) = WorksheetFunction.Transpose(ArrayWerte)
End If
Erase ArrayWerte
y = 0
Next i
End With
Workbooks("Input.xls").Close True
Set rSuche = Nothing
Set rFinde = Nothing
ERRHANDLER:
ActiveSheet.Protect
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = intCalc
End With
End Sub

Gruß
Rudi
Anzeige
AW: Export Code arbeit sehr langsam
30.08.2010 15:26:56
Maris
Hi Rudi,
danke für dein Feinschliff am Code, jetzt macht er leider garnichts mehr... anscheinend steigt er aufgrund eines Fehlers beim Export aus... :-(
Gruß
Maris
AW: Export Code arbeit sehr langsam
30.08.2010 15:31:56
Rudi
Hallo,
lad mal Beispielmappen hoch. Aber nicht als 2007!
Gruß
Rudi
und Input.xls? owT
30.08.2010 16:10:19
Rudi
AW: und Input.xls? owT
30.08.2010 16:53:11
Maris
ist genau die selbe nur ohne Daten :-)
AW: und Input.xls? owT
30.08.2010 17:57:32
Maris
Set rFinde = .Range("A1:CA1")
For i = 1 To 79
Set rSuche = rFinde.Find(what:=ArrayÜberschrift(i), LookAt:=xlWhole, LookIn:=xlValues)

index liegt ausserhalb des gültigen bereichs! Verstehe ich nicht.... muß eigentlich stimmen...
Anzeige
AW: und Input.xls? owT
31.08.2010 07:03:53
Hajo_Zi
Halo Maris,
vielleicht hat Dein Array nicht 79 Elemente?

AW: und Input.xls? owT
31.08.2010 11:50:35
Maris
Hmmmm.... A1:CA1 sind doch genau 79 Elemente...
AW: und Input.xls? owT
31.08.2010 11:52:28
Hajo_Zi
Hallo Marris,
meine Aussage bezog sich auf dieses Array ArrayÜberschrift(i)
Gruß Hajo
AW: und Input.xls? owT
31.08.2010 12:22:26
Maris
Egal wie ich den Bereich anpasse:
ArrayÜberschrift = wksOut.Range("B1:CB1")
oder
ArrayÜberschrift = wksOut.Range("A1:CA1")
funzt net :-(
Anzeige
Versuch: Timemarker
31.08.2010 13:21:02
Marc
Ich hab die Dateien noch, mit dem entsprechenden Code, den ich dir rübergeschickt hab.
Bei mir dauert das ganze 4 Sekunden, immer.
Versuch doch mal, ob du nicht "Zeitnehmer" einbauen kannst, die dir vielleicht einen Hinweis geben, wo´s hakt.
debug.print "Punkt 1: " & format(time(),"mm:ss")
Gruß, Marc
AW: Versuch: Timemarker
31.08.2010 14:40:12
Maris
Das problem leigt daran das er jede Spalte einzeln durch geht... wenn ich die Fenster gegenüberstelle ieht man das... der zweite Code funktioniert super allerdings gibts Probleme mit dem Bereich und ich komm einfach nicht drauf... versuch mal weiter zu bastelln und zu debuggen hab aber wenig hoffnung :-(
Gruß
Maris
Anzeige
AW: Export Code arbeit sehr langsam
31.08.2010 16:15:48
Maris
problem gelöst... ich hab die berechnung angehalten und seit dem gehts wieder zügig :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige