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

Datei langsam - Fehler im VBA-Code?

Datei langsam - Fehler im VBA-Code?
30.01.2020 16:54:54
Richard
Hallo zusammen,
ich bin neu hier und benötige die Unterstützung der Profis ;)
Ich habe ein Excel-Dokument erstellt, welches beim Wechseln der Tabellenblätter extrem langsam ist.
Jedes Tabellenblatt steht für einen Bereich:
1. Blatt - Kaltakquise - alle Infos, die man vom (Neu)Kunden erhält werden hier erfasst
2. Blatt - Angebotsstatus - vom "noch erstellen" bis zum "angenommen" und wie heißt der Auftrag werden hier die Daten eingetragen
3. Blatt - offene Aufträge - welcher Kunde hat die Angebote angenommen und was muss getan werden?
4. Blatt - Abrechnung - alle Daten sind vereint, die zur Abrechnung führen
Tabellenblatt1:
Im Grunde starte ich auf dem ersten Blatt mit einer Tabelle, in welcher in jeder Zeile eine ID steht.
Diese ID kopiere ich mittels Index auf die zweite Seite und nutze den Sverweis, in Verbindung mit der ID, für alle weiteren Daten von Seite 1.
Solange auf der ersten Seite nicht unter "Angebot erwünscht" ein "Ja" eingetragen wird, wird genau diese ID-Zeile auf dem zweiten Tabellenblatt NICHT sichtbar gemacht (VBA).
Tabellenblatt2:
Jetzt können die Kollegen aus dem Team Angebote schreiben und alle wichtigen Informationen auf dieser Seite hinterlegen.
Es wird sozusagen die Ursprungstabelle mit neuen Spalten und Informationen erweitert. Sobald das Angebot vom Kunden angenommen wurde, wird es auf dem dritten Tabellenblatt sichtbar
Tabellenblatt3:
Auf dem dritten Tabellenblatt werden wieder neue Spalten hinzugefügt und somit die Ursprungstabelle quasi erweitert. Es werden neue Informationen anderer Kollegen eingetragen, die sich z.B. um den Transport, die Installation etc kümmern.
Jedes "Projekt" beinhaltet mindestes einen Bestandteil aus Hardware, Dienstleistung oder Software.
Wenn alle Bestandteile abgeschlossen sind, ist das Projekt beendet (farbliche Markierung durch bedingte Formatierung) .
In vielen Fällen hat nicht ein Projekt alle Bestandteile. Dann werden die anderen Bestandteile mit "nicht vorhanden" ausgewiesen.
Wenn ein Bestandteil abgeschlossen ist, kann man mittels JA/NEIN auswahl diesen zur Abrechnung (viertes Tabellenblatt) "weitergeben".
Tabellenblatt4:
Es wird also wieder die unsichtbare Zeile sichtbar gemacht.
Auf dem letzten Tabellenblatt sind wieder Kopien der Ursprungstabelle und es werden weitere Daten eingetragen.
Wenn der Kunde bezahlt hat, ist alles grün. Wenn nicht, muss halt nachgefragt werden.
Die Daten sind willkürlich und zur Veranschaulichung hinterlegt.
Jedes Tabellenblatt hat einen kleinen VBA-Code, der die Zeilen veschwinden lässt, oder wenn Bedingung ABC erfüllt ist, diese wieder einblendet.
Die Datei ist jedoch so langsam, das ich echt nicht weiter weiß. Habe ich mich extrem verrannt? Kann es an diesem kleinen VBA-Code liegen? oder an den ganzen bedingten Formatierungen, wenn/dann-funktionen`?
ICh hoffe ihr könnt mir helfen.
BG
Richard
https://www.herber.de/bbs/user/134858.xlsm

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei langsam - Fehler im VBA-Code?
30.01.2020 17:12:56
peterk
Hallo

Private Sub Worksheet_Activate()
Dim i As Long
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculate = xlManual
For i = 1 To 1000
If Cells(i, 17).Value = "1" Or Cells(i, 17).Value = "0" Then
Rows(i).Hidden = True
ElseIf Cells(i, 17).Value = "" Then
Rows(i).Hidden = False
End If
Next i
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculate = xlAutomatic
End Sub

AW: Datei langsam - Fehler im VBA-Code?
31.01.2020 08:25:17
Richard
Moin peterk,
vielen Dank für die Rückmeldung.
VBA meckert bei Application.Calculate = xlManual rum, hab ich dann in Application.Calculation = xlManual abgeändert.
Jetzt dauert das laden der einzelnen Blätter nicht mehr ca. 23/24 sekunden, sondern "nur noch" 19/20 sek.
Das ist aber immer noch viel zu langsam. Gibt es noch anderen Möglichkeiten/Ideen?
Ist ggf der Aufbau der Tabelle totaler Mist und gibt es Alternative?
Danke für die Antwort
BG
Rchard
Anzeige
AW: Datei langsam - Fehler im VBA-Code?
30.01.2020 17:38:22
Daniel
HI
bei jeder Aktion, die du per VBA im Tabellenblatt ausführst, starten automatisch Aktivitäten im Hintergrund und es brauchst immer eine gewisse Zeit, bis die abgearbeitet sind.
Einige von diesen Aktivitäten kann man abschalten (ScreenUpating, EnableEvents, Calculation), einige nicht.
Weiterhin ist Excel so intelligent, dass es diese Aktivitäten bündeln kann, wenn mehrere Zellen gleichzeitig auf dieselbe Art bearbeitet werden, vorzugsweise sollten diese Zellen einen lückenlosen Block bilden.
so braucht beispielsweise das Ausblenden von 1000 Zeilen im Block nicht länger als das Ausblenden einer einzelnen Zeile.
Das sollte man beim Programmieren berücksichtigen.
Hilfreich ist auch immer, auch in einem Makro die Excelmenüfunktionen zur Bearbeitung zu nutzen.
ohne Makro würdest du ja auch nicht jede Zeile einzeln ausblenden ,sondern einfach den Autofilter entsprechend anwenden. Mach das auch im Makro. Der Recorder ist dein Freund.
gruß Daniel
Anzeige
AW: Datei langsam - Fehler im VBA-Code?
31.01.2020 08:38:50
Richard
Moin Daniel,
eine gewisse Zeit ist ja ok, aber nicht 24 sekunden pro Blatt-Wechsel :D
ScreenUpating, EnableEvents, Calculation hab ich dank peterk eingebaut. Optimiert von 24 sek auf 19/20sek.
Die Blockthematik verstehe ich, kann ich aber nicht umsetzen. Es kommt ja drauf an, wie die Kunden reagieren. Wenn alle KEIN Angebot wollen, habe ich natürlich einen größeren Block, als wenn jeder 3 oder 4 ein Angebot benötigt und somit die bestimmte Zeile eingeblendet werden müssen.
den letzten Part verstehe ich nicht. Meinst du, die bedingten Formatierungen, wenn-dann-funktionen etc lieber ins makro packen?
BG
Richard
Anzeige
AW: Datei langsam - Fehler im VBA-Code?
31.01.2020 13:48:32
Daniel
HI
ich meine den Autofilter, über den du von Hand in einer Liste bestimmte Zeilen ein- und ausblenden kannst
den kann man auch per Marko ansteuern und der ist wesentlich schneller als jede Zeile einzeln auszublenden.
wenn der Autofilter nicht verwendbar ist (warum auch immer), funktioniert das ausblenden von bestimmten Zellen am schnellsten dadurch, dass man die auszublenden Zeilen in einer Range-Variable sammelt und dann diese Zeilen gemeinsam ausblendet.
dim Prinzip so, ausgeblendet werden alle Zeilen, die in Spalte A leer sind
dim Zelle as Range
dim Bereich as range
activeSheet.Cells.EntireRow.Hidden = false
for each Zelle in Activesheet.Usedrange.Columns(1)
if Zelle.Value = "" then
if Bereich is Nothing then
Set Bereich = Zelle
else
Set Bereich = Union(Bereich, Zelle)
end if
end if
Next
if not Bereich is Nothing then Bereich.EntireRow.HIdden = True
Gruß Daniel
Anzeige
AW: Beherzig Daniels Ratschlag: Autofilter
31.01.2020 09:28:42
EtoPHG
Hallo Richard,
Warum bearbeitest du 1000 Zeilen, wenn die Listobjekte wesentlich kleiner sind und schon einen Autofilter enthalten?
1. Alle Tabellencodes löschen!
2. Diesen Code in DieseArbeitsmappe (ist natürlich ausbaubar):
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim lColFilter As Long
' je nach Tabellenblatt: Spaltennummer zur Filterung (=Nur Leere)
' innerhalb dessen ListObjekts bestimmen
Select Case Left(Sh.Name, 2)
Case "2.": lColFilter = 16
Case "3.": lColFilter = 19
Case "4.": lColFilter = 15
End Select
If lColFilter > 0 Then
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
On Error Resume Next
Sh.ListObjects(1).AutoFilter.ShowAllData
On Error GoTo resetAppl
Sh.ListObjects(1).Range.AutoFilter Field:=lColFilter, Criteria1:="="
resetAppl:
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
Gruess Hansueli
Anzeige
AW: Beherzig Daniels Ratschlag: Autofilter
31.01.2020 11:38:22
Richard
Sehr sehr gute Frage Hansueli. :D
Also es klappt super. Die "Performance", sofern es so etwas bei Excel gibt, ist abartig schnell ;)
Vielen Dank.
BG
Richard

156 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige