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

Excel hängt sich auf

Excel hängt sich auf
01.11.2016 21:11:01
Fred
Hallo Experten,
Ich habe ein Tabellenblatt „Basis“ mit einer formatierten Tabelle namens „Basis“
In diese Tabelle möchte ich den Inhalt mehrerer Tabellenblätter einer anderen Mappe einfügen,- zuvor wird der Inhalt meiner Tabelle „Basis“ gelöscht.
Dies geschieht derzeit mit diesem Code:

Sub AktuelleDaten()
Worksheets("Basis").Range("A3:AV10000").EntireRow.Delete
Worksheets("Basis").Range("A2:I2").ClearContents
Dim wksZ As Worksheet, wksQ As Worksheet, wkbQ As Workbook
Const strWkbQ As String = "Aktuell.xls"
Application.ScreenUpdating = False
Set wksZ = ThisWorkbook.Sheets("Basis")
On Error Resume Next
Set wkbQ = Workbooks(strWkbQ)
On Error GoTo 0
If wkbQ Is Nothing Then
Set wkbQ = Workbooks.Open(ThisWorkbook.Path & "\" & strWkbQ)
End If
For Each wksQ In wkbQ.Worksheets
wksQ.Cells(1, 1).CurrentRegion.Offset(1).Resize(, 9).Copy _
wksZ.Cells(Rows.Count, 1).End(xlUp).Offset(0)
Next
wkbQ.Close False 'QuellWB ohne zu speichern schließen
End Sub

Das Problem:
Bei ca. 2200 DS Import, dauert der Vorgang ca. 35 Sekunden
Importiere ich ca. 7000 DS, schmiert Excel ab
Andersrum, wenn ich mit diesem Code nicht in eine Tabelle importiere, sondern einfach nur ins Tabellenblatt „Basis“, ist die Sache in 2-3 Sekunden erledigt.
Kann mir jemand sagen, woran dies an meinem Code liegt?
mfg
Fred

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel hängt sich auf
01.11.2016 21:19:47
Ludmila
Hallo Fred,
probier mal folgendes
Vor Deinem Code eingeben getmorespeed True
am Ende getmorespeed False
Ich hatte auch das Zeitproblem und bin damit von 20 Sec. auf 2 Sec. runter.
Gruß
Ludmila
Public Static

Sub getMoreSpeed(Optional ByVal Modus As Boolean = True)
'   Schaltet Kalkulationsmodus, Bildschirmaktualisierung und Event-Handling aus/ein
Dim intCalculation As Integer
Dim bRan  As Boolean
If Modus And Not bRan Then intCalculation = Application.Calculation
With Application
.ScreenUpdating = Not Modus
.EnableEvents = Not Modus
.DisplayAlerts = Not Modus
.Calculation = IIf(Modus, xlCalculationManual, intCalculation)
.Cursor = IIf(Modus, xlWait, xlDefault)
End With
bRan = Modus
End Sub

Anzeige
AW: Excel hängt sich auf
01.11.2016 21:37:06
Fred
Moin Ludmila,
danke für den Tipp,- leider greift dies bei mir nicht.
Ich kenne mich mit vba überhaupt nicht aus, in Anbetracht, dass der Import ruckzuck ins Tabellenblatt kommt aber lange braucht, bis in die formatierte Tabelle, dies liegt wohl an meinem vba.
Kennst du die Anweisung, mit vba den Tabellennamen anzugeben (ich gebe ja das Sheet an ...
mfg
Fred
AW: Excel hängt sich auf
01.11.2016 22:11:28
Ludmila
H
AW: Excel hängt sich auf
01.11.2016 22:43:36
Fred
Ludmila,
ich habe dein vba so eingericht, wie du es beschrieben hast, es läuft (daher wohl richtig) - aber die Zeit ist nach wie vor unter aller S..
AW: Excel hängt sich auf
01.11.2016 23:22:27
Fred
.. habe nun festgestellt, dass wenn ich in meinem vba die Änderung

.Offset(1)
durchführe, läuft es Geschwindigkeitmäßig "normal",- 8000 DS in ca. 5 Sek.
Anzeige
AW: Excel hängt sich auf
01.11.2016 23:43:49
Piet
Hallo Fred,
hatte deine letzte Antwort noch nicht gesehen, hat sich überschnitten.
Kann es sein das hier gedankliche Telepathie am Werk war? - .Offset(1)
Amüsant das du es selbst gefunden hast. Ich gratuliere dir von Herzen.
Warum es aber so gravierende Auswirkungen hat ist mir noch nicht klar?
mfg Piet
AW: Excel hängt sich auf
01.11.2016 22:11:28
Ludmila
H
AW: Excel hängt sich auf
01.11.2016 22:19:13
Ludmila
Hallo Fred,
falsche Taste gedrückt.
Die Anweisung Public Static Sub getMoreSpeed(Optional ByVal Modus As Boolean = True) in ein eigenes Modul einfügen.
Für die Bestimmung der Tabellenblätter
Private Sub CommandButton1_Click()
Dim wksL1 as Object z.B. Liste1 - Tabellenblatt Name
Dim wksL2 as Object z.B. Liste2
Set wksL1 = ThisWorkbook.Worksheets("Liste1")
Set wksL2 = ThisWorkbook.Worksheets("Liste2")
With wksL1
getMoreSpeed True
...Dein Code
getMoreSpeed False
end with
usw.
End Sub

Bin auch kein großer Profi.
Wenn Deine Datei nicht zu geheim ist, dann lade diese hoch.
Gruß
Ludmila
Anzeige
AW: Excel hängt sich auf
01.11.2016 23:35:08
Piet
Hallo Fred,
ich bin kein Fussbal Fan, auch kein echter Profi, aber ein alter Praktiker und Tüfftler wenns um knifflige Fehlersuche geht. Kann nicht garantieren das ich was finde, aber habe konkrete Fragen. Deine Beispieldatei habe ich geladen, kann darin keinen Fehler sehen. Könnte es ein simples Überlauf Problem sein? D.h., wenn Excel abstürzt, wie voll ist dann die Tabelle. Bis zur letzten Zeile?
Das sind über 1 Million Zeilen. Gibt es bestimmte Datensaetze bei denen Excel abstürzt? Evtl. Daten Unvertraeglichkeiten?
Die Fehlerliste ist lang. Da bleibt nichts anderes übrig als den Fehler systematisch einzukreisen - nach Ausschluss Verfahren.
Was pssiert jetzt wenn Excel abstürzt, markiert er die befehlszeile gelb?* Wenn ja welche Zeile, bei welchem Befehl?
Wenn es die Copy Zeile ist schreibe sie mal wie unten um: Dann sieht man ob Copy oder Paste das Prolem ist.
Im unteren Code ist meines Erachtens auch ein Fehler, ist er dir bisher noch nie aufgefallen?
bei: .End(xlUp).Offset(0) müsste die letzte Zeile von den neuen Daten überschrieben werden.
Probier mal Offset(1,0) aus, damit geht man in die naechste Zeile.
mfg Piet
         wksQ.Cells(1, 1).CurrentRegion.Offset(1).Resize(, 9).Copy
wksZ.Cells(Rows.Count, 1).End(xlUp).Offset(0).PasteSpecial xlPasteAll

Anzeige
AW: Excel hängt sich auf
01.11.2016 23:49:07
Fred
Moin Piet,
ja, ich habe nun auf Offset(1,0) geändert,- mit den leeren Zeilen zwischen durch, kann ich in den folgenden Berechnungen leben.
Im Momen (durch die Offset Änderung) brauch ca. 8000 DS ca. 12 Sek.
Ist das normal?
Auf jedenfall besser als zuletzt über 50 Sek. - da kam auch nach ca. 10 Sek die Meldung "Keine Rückmeldung" und ich hatte das Programm geschlossen.
Dann habe ich mit der Offset-Änderung noch

Application.CutCopyMode = False
ins vba eingegeben .....
AW: Excel hängt sich auf
02.11.2016 00:34:49
Fred
.. mit diesen 12 sek. muß ich wohl leben ..
Bemerkenswert finde ich nur, dass wen ich die gleiche Menge an DS in ein unformartiertes Arbeitsblatt kopiere, der Vorgang in 4 Sek. erledigt ist (liegt es evt. an den Berechnungen in meiner formartierten Tabelle?)
gru0
Fred
Anzeige
AW: Excel hängt sich auf
02.11.2016 06:56:25
baschti007
Hey Fred hatte dir die Lösung doch nicht gefallen welche ich dir gemacht hatte ohne copy ?
Weil ich meine Direkt aus dem Array die Sachen einzufügen geht bestimmt doppelt so schnell.
Gruß Basti
Sub DatenImport()
Dim wksZ As Worksheet, wksQ As Worksheet, wkbQ As Workbook, wksQArray, WB As Long
Const strWkbQName As String = "Saison11_12,Saison12_13,Saison13_14,Saison14_15,Saison15_16, _
Saison16_17"
Const strWkbQ As String = "5Jahre.xls,4Jahre.xls,3Jahre.xls,2Jahre.xls,1Jahre.xls,Aktuell.xls" _
Application.ScreenUpdating = False
Set wksZ = ThisWorkbook.Sheets("Basis")
On Error Resume Next
For WB = LBound(Split(strWkbQ, ",")) To UBound(Split(strWkbQ, ","))
On Error Resume Next
Set wkbQ = Workbooks(Split(strWkbQ, ",")(WB))
If wkbQ Is Nothing Then
Set wkbQ = Workbooks.Open(ThisWorkbook.Path & "\00_Daten\" & Split(strWkbQ, ",")(WB))
End If
For Each wksQ In wkbQ.Worksheets
wksQArray = wksQ.Cells(1, 1).CurrentRegion.Offset(1).Resize(, 8).Value
wksZ.Cells(wksZ.Rows.Count, 1).End(xlUp).Offset(1).Resize(UBound(wksQArray, 1), UBound( _
wksQArray, 2)) = wksQArray
wksZ.Cells(wksZ.Rows.Count, "I").End(xlUp).Offset(1).Resize(UBound(wksQArray, 1) - 1) =  _
Split(strWkbQName, ",")(WB)
Next
wkbQ.Close False
Set wkbQ = Nothing
Next WB
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Excel hängt sich auf
02.11.2016 08:04:59
Fred
Guten Morgen Basti,
dein vba nutze ich.
Die Misere mit der langen Import-Zeit wurde nicht behoben. Die Daten aus den 5 Mappen (derzeit über 52000 DS) will ich auf jedenfall mit deinem vba importieren. Ich denke mal, es liegt an den ganzen Berechnungen, die unmittelbar bei Import aktiviert werden. Grund zu dieser Annahme: Importiere ich die gleichen 52.000 DS in eine Tabelle, welche durch Formeln keinen Bezug auf den Import nimmt, geht das alles in ca. 10 Sekunden über die Bühne ..
AW: Excel hängt sich auf
02.11.2016 08:23:08
Fred
.. ich habe da so eine Idee.
Meine Frage: Kann man für die Dauer meines VBA`s die Neuberechnung ausschalten?
Anzeige
Genau das macht u.a. GetMoreSpeed (owT)
02.11.2016 14:27:04
EtoPHG

AW: Genau das macht u.a. GetMoreSpeed (owT)
02.11.2016 17:49:24
Fred
Ich will mich nicht weit aus dem Fenster lehnen, schließlich kann ich kein VBA. Das sind mal so die Möglichkeiten,welche ich entdeckt habe, um bei großen Datenverarbeitungen in Excel etwas mehr Geschwindigkeit rauszukitzeln.

Application.Calculation = xlCalculationManual 'schaltet autom. Neuberechnung ab
Application.ScreenUpdating = False 'deaktiviert Bildschirmaktualisierung
Application.DisplayStatusBar = False 'kein Update der Statusleiste
Application.EnableEvents = False 'ignoriert Ereignisse während der Ausführung
Activesheet.DisplayPageBreaks = False 'verbirgt Seitenumbrüche
'... hier dann der eigentliche code .....
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
Activesheet.DisplayPageBreaks = True

Anzeige
AW: Excel hängt sich auf
02.11.2016 15:15:55
Piet
Hallo Fred
im Prinzip hast du eine schöne Lösung von Ludmila und EtoPHG hat es ohne Worte bestaetigt.
Übernimm die Lösung von Ludmila oder einfach die Anweisung aus dem Archiv Beispiel von geri
Zwei Zeilen nach

Sub AktuelleDaten() - und zwei Zeilen vor End Sub
. Damit sollte es besser klappen. Rückmeldung ob es so besser klappt würde mich freuen.
mfg Piet

112 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige