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

Schleife läuft ewig

Schleife läuft ewig
26.02.2016 21:43:40
EasyD
Servus Liebe VBA Cracks
Ich habe mit viel Mühe eine Schleife gebaut, die nacheinander in zwei Tabellenblättern jeweils die Differenz aus 2 Spalten rechnet und das Ergebnis in ein drittes Tabellenblatt schreibt. Eigentlich nicht ungewöhnlich denke ich. Das Problem ist, der Code läuft waaaaaahhhhnsinnig langsam. Ich habe das jetzt schon ein paar mal angestoßen und unterschiedlich lange laufen lassen bevor ich es abgewürgt habe. Das Ergebnis waren unterschiedlich viele in dem dritten Tabellenblatt eingetragene Werte bei jedem Versuch. Daraus folgere ich, dass der Code eigentlich fehlerfrei läuft, nur halt extrem langsam.
Die Blätter die ausgelesen werden haben beide jeweils irgendwas um die 8.000 mit Daten gefüllte Zeilen. Ist recht viel, aber kann das wirklich ein Problem sein?
Der Code:
(sorry für diesen krückenhafte Darstellung, das macht der editor hier selber)
Sub Uebertrag()
Dim LoletzteA As Long
Dim LoletzteB As Long
Dim Loi As Long
Dim Lozeile As Long
If MsgBox("Haben Sie die Kontenblätter eingefügt?", vbYesNoCancel, "Daten aktualisieren") =  _
vbYes Then
' Arbeitsschritt Tabelle Bank durchlesen
With Worksheets("Bank")
LoletzteA = IIf(IsEmpty(.Cells(Rows.Count, 13)), .Cells(.Rows.Count, 13).End(xlUp).Row,  _
.Rows.Count)
LoletzteB = IIf(IsEmpty(.Cells(Rows.Count, 14)), .Cells(.Rows.Count, 14).End(xlUp).Row,  _
.Rows.Count)
For Loi = 1 To Application.WorksheetFunction.Max(LoletzteA, LoletzteB)
' Wenn Spalte 5 Numerisch ist dann
If IsNumeric(.Cells(Loi, 5)) Then
' Errechne aus Tabelle Bank Spalten 13 (Soll) und 14 (Haben) und schreibe in  _
Tabelle Zahlung Spalte4
Worksheets("Zahlung").Cells(Lozeile + 1, 4) = .Cells(Loi, 13) - .Cells(Loi, 14)
' Ermittele aus Tabelle Bank Spalte5 (E) und schreibe in Tabelle Zahlung  _
Spalte3
Worksheets("Zahlung").Cells(Lozeile + 1, 3) = .Cells(Loi, 5)
'Wert für die Schule einfügen
Worksheets("Zahlung").Cells(Lozeile + 1, 2) = 16 & Left(.Cells(Loi, 5), 3)
Else
'Beschriftung in Spalte5 der Tabelle Zahlung
Worksheets("Zahlung").Cells(Lozeile + 1, 5) = "Bank"
End If
Lozeile = Lozeile + 1
Next Loi
End With
' Arbeitsschrift Tabelle Verrechnung durchlesen, identische Prozedur
With Worksheets("Verrechnung")
LoletzteA = IIf(IsEmpty(.Cells(Rows.Count, 13)), .Cells(.Rows.Count, 13).End(xlUp).Row,  _
.Rows.Count)
LoletzteB = IIf(IsEmpty(.Cells(Rows.Count, 14)), .Cells(.Rows.Count, 14).End(xlUp).Row,  _
.Rows.Count)
For Loi = 1 To Application.WorksheetFunction.Max(LoletzteA, LoletzteB)
If IsNumeric(.Cells(Loi, 5)) Then
Worksheets("Zahlung").Cells(Lozeile + 1, 4) = .Cells(Loi, 13) - .Cells(Loi, 14)
Worksheets("Zahlung").Cells(Lozeile + 1, 3) = .Cells(Loi, 5)
Worksheets("Zahlung").Cells(Lozeile + 1, 2) = 16 & Left(.Cells(Loi, 5), 3)
Else
Worksheets("Zahlung").Cells(Lozeile + 1, 5) = "Verrechnung"
End If
Lozeile = Lozeile + 1
Next Loi
End With
ActiveWorkbook.RefreshAll
ElseIf MsgBox("Haben Sie die Kontenblätter eingefügt?", vbYesNoCancel, "Daten aktualisieren") =  _
vbNo Then
MsgBox "dann bitte nachholen!"
Else
MsgBox "Die Auswertung entspricht nicht dem aktuellen Stand!"
End If
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife läuft ewig
27.02.2016 07:09:27
Luschi
Hallo EasyD,
sicher hast Du in in der Tabelle 'Zahlung' die Ereignis-Routine
'Worksheet_Change(ByVal Target As Range)' definiert.
Jeder Schreibvorgang in 1 Zelle dieser Tabelle (auch per Vba) löst diese Routine aus.
Deshalb suche bei Google mal nach 'Excel GetMoreSpeed'. Da findest Du dann auch diesen Link:
http://www.online-excel.de/fom/fo_read.php?f=1&bzh=21803&h=21803
Gruß von Luschi
aus klein-Paris

AW: Schleife läuft ewig
27.02.2016 12:09:30
EasyD
Servus Luschi
danke für die Antwort, aber ich sag mal einfach:
sicher hast Du in in der Tabelle 'Zahlung' die Ereignis-Routine
'Worksheet_Change(ByVal Target As Range)' definiert.

nope - habe ich nicht.
Der Code oben ist schon alles was ich in diesem Projekt überhaupt mache.
Allerdings übersteigt der Link den du gepostet hast auch meine VBA-Fähigkeiten. Vielleicht löst das ja mein Problem doch noch. Kannst du in ein paar Worten umreién worum es konkret geht?

Anzeige
AW: Schleife läuft ewig
27.02.2016 12:17:39
EasyD
Problem gelöst
einfach:
am Anfang
Application.ScreenUpdating = False
Application.Calculation = xlManual
Am Ende
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
die Schleife läuft in Sekunden ab.....

AW: Schleife läuft ewig
27.02.2016 19:29:45
Piet
Hallo EasyD
hört sich für mich so an als ob in der Tabelle viele Formeln waeren.
Ich nenne das "grausame Monster Tabellen", sie werden irre langsam.
Gibt es nicht Zellen die man durch feste Werte ersetzen kann?
hier mal ein konkrete Formel aus einer Beispieldatei:
=_xlfn.IFERROR(EĞER(AY($D$2)=AY(D2+1);D2+1;"");"")
Ich habe keine Ahnung was diese Formel macht und warum man sie so schreibt.
Ihre Funktion war nur den naechsten Tag berechen. Vom 1.1. den 2.1. pro Monat
Das mache ich so: Den 1. Tag als 1 eingeben und dann per Formel diese Zelle + 1
Will man in dieser Datei eine Zelle anklicken dauert die Anzeige 5-6 Sekunden
Ich hasse solche Excel Dateien ....
mdg Piet

Anzeige
AW: Schleife läuft ewig
27.02.2016 19:51:39
Oberschlumpf
Hi Piet
wenn du z Bsp in A1 die 1 eingibst, dann versuch mal diese Formel in eben einer anderen Zelle, z Bsp in B1:
=HEUTE()+A1
Wenn du in A1 1 einträgst, erscheint in B1 = 28.02.2016
Wenn du in A1 5 einträgst, erscheint in B1 = 03.03.2016
Das ist doch auch das, was du mit deiner komplizierten Formel erreichen wolltest, oder?
Ciao
Thorsten

Du hast wohl 'nen Xl-Türk zu laufen, ...
27.02.2016 20:30:04
Luc:-?
…Piet,
noch dazu in einer Xl-Version vor Xl12/2007. Dann wäre diese Wiedergabe typisch. Sie bedeutet ab Xl12/2007:
=WENNFEHLER(WENN(MONAT($D$2)=MONAT(D2+1);D2+1;"");"")
Außerdem hatte EasyD sein Problem bereits mit VBA auf klassische Weise gelöst.
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Schleife läuft ewig
27.02.2016 21:54:58
EasyD
Hallo Piet
die Tabelle hat schon einiges zu berechnen. Viele Summewenn-Funktionen, dann ist noch ne Pivot drin... Brauche ich aber leider wirklich alles.
Aber das Problem mit dem Tempo habe ich ja gelöst bekommen.
Trotzdem Danke für den Tipp, werde das beherzigen in Zukunft

AW: Schleife läuft ewig
27.02.2016 22:20:32
Piet
Hallo Luc
ich weiss nicht wie die Datei geschrieben wurde, mit welchem System
Wenn du eine Zelle anklicken willst kannst du Kaffe trinken gehen!
Sei doch so lieb und schau dir die Datei bitte selbst einmal an.
Würde mich interessieren warum sie so langsam laeuft ...
Da ist mein Wissen am Ende, aber den Thread bearbeiten war nervig.
Zur Makro Lösung habe ich auch den Trick benutzt: Calculation Manuell
Nach jeder Zahl die gefunden wurde konnte man Kaffe trinken!
1474914 Formel zum übertragen von Zeiten - Marco 11.02.2016 21:02:28
https://www.herber.de/bbs/user/103480.xlsm 
mfg Piet

Anzeige
Dein Link ist fehlerhaft, ...
28.02.2016 01:10:45
Luc:-?
…Piet,
denn er enthält am Ende noch ein nobreakspace-Zeichen (ASCII 160), was man schon am Überstand des Unterstrichs erkennen kann. Richtig lautet er wohl:
https://www.herber.de/bbs/user/103480.xlsm
Ich konnte kein auffälliges DateiVerhalten feststellen. Sie enthält ja auch nichts Besonderes, viele recht normale Fmln, viell auch etliche ungeschickte (auf dem 1.Blatt* bestimmt), keine Ereignisprozeduren, die sich selbst auslösen könnten. Korrekturen und Eintragung zusätzlicher Fmln konnte ich problemlos vornehmen, obwohl der Berechnungsmodus automatisch ist.
Die Datei wird auf einem modernen PC unter mindestens Xl14/2010 erstellt worden sein; den türkischen Schrott-PC mit Xl9-11/2000-2003 wirst wohl du verwendet haben… ;-]
* Das wären folgende Additionen auf Stundenzettel:
E13[;E21;E29;E37;E45]:=TEILERGEBNIS(9;E6:E12)
E46:=TEILERGEBNIS(9;E10:E45)

Gruß, Luc :-?
Besser informiert mit …

Anzeige
Korrektur: meinte 'mindestens Xl12/2007'! owT
28.02.2016 01:14:26
Luc:-?
:-?

AW: Hallo Luc ola bilir...!
28.02.2016 13:17:14
Piet
auf deutsch: du könntest Recht haben
ich weiss nicht woran du meinen PC Typ erkennen kannst? Macht mich neugierig.
Soweit gehen meine Kenntnisse nicht... Er stammt tatsachlich von einem Türken.
Kann mir mit 500 EU Rente keinen neuen leisten. Mir reicht er für kleine Aufgaben.
mfg Piet

An den Fktsnamen, denn die sind türkisch, ...
28.02.2016 13:47:32
Luc:-?
…Piet;
ay heißt Monat und eğer wenn (Online Türkisch-Deutsch → ğ kommt nun nicht in soviel Sprachen mit Lateinschrift, aber in bspw Erdoğan vor ;-]). Außerdem ist die Darstellung der Xl12-Fkt WENNFEHLER als _xlfn.IfError typisch für Dateien, die unter einer Version mit dieser Fkt erstellt, aber in einer Version ohne diese Fkt geöffnet wdn.
Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige