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

Performance Makro

Performance Makro
11.06.2021 13:06:08
Lenny
Guten Tag zusammen
Mit Hilfe dieses Forums konnte ich die Makro- Funktion (Zeilenhöhe wird beim Filtern angepasst) in mein Excel integrieren. Soweit funktioniert das Tipptopp. Ein erhebliches Manko ist jedoch die Performance.
Bereits beim Öffnen dauert Sekunden. Aber auch beim Bearbeiten oder Filtern dauert es eine gefühlte Ewigkeit bis die "Berechnung" durch ist. Je mehr Daten das Excel enthält umso schlechter wird die Performance.
Sieht jemand von euch eine Möglichkeit die Performance zu verbessern?
Option Explicit

Private Sub Worksheet_Calculate()
''dieses Ereignis wird ausgelöst durch die Funktion in Zelle 'F1'
Application.EnableEvents = False
Call Machmal
Application.EnableEvents = True
End Sub

Private Sub Machmal()
Dim rg1 As Range, rg2 As Range, rg3 As Range
Set rg1 = Tabelle1.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
For Each rg2 In rg1
If rg2.Address(0, 0)  "A1" Then
For Each rg3 In rg2.MergeArea
rg3.RowHeight = 18
Next rg3
End If
Next rg2
Set rg1 = Nothing: Set rg2 = Nothing: Set rg3 = Nothing
End Sub
Besten Dank in Voraus und Gruss
Lenny

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Performance Makro
11.06.2021 13:31:06
Daniel
Hi
naja, wie im richtigen Berufsleben auch.
unnötige Doppelarbeit vermeiden.
du lässt die Schleife über alle Zellen der Tabelle laufen um die Zeilenhöhe einzustellen.
Dabei ist aber die Zeilenhöhe für alle Zellen einer Zeile gleich. dh wenn du für Zelle A2 die Zeilenhöhe eingestellt hast, dann ist es nicht mehr notwendig, in Zelle B2 auch nochmal die Zeilenhöhe einzustellen. Das ist so, wie wenn ihr zu dritt im Büro sitzt, und wenn nach 20 minuten das Lüften ansteht, dann müsst ihr ja auch nicht alle drei nacheinander aufstehen und da fenster 3x öffnen, sondern einer reicht.
So auch hier, lass die Schleife nur über eine Spalte des des Bereichs laufen, aber nicht über alle Spalten:

For each rg2 in rg1.Columns(1)
die zweite Schleife über die Mergeareas sollte sich eigentlich auch erübrigt haben.
andereseits, warum überhaupt schleife?
alle Zeilen bekommen die gleiche Zeilenhöhe ohne unterscheidung.
dann kann man auch allen Zeilen gleichzeitig die Zeilenhöhe zuweisen
die Überschriftenzeile kann man auch anders rausnehmen:

Set rg1 = Tabelle1.AutoFilter.Range
intersect(rg1, rg1.offset(1, 0)).specialcells(xlcelltypevisible).EntireRow.Rowheigt = 18
oder man setzt einfach alles auf 18 und die Zeile 1 dann hinterher wieder auf den sollwert.

Tabelle1.AutoFilter.Range.SpecialCells(xlCellTypeVisible).entirerow.rowheigt = 18
Tabelle1.Rows(1).EntireRow.Autofit
Gruß Daniel
Anzeige
AW: Performance Makro
11.06.2021 15:10:40
GerdL
Moin Lenny!
Private Sub Worksheet_Calculate()
''dieses Ereignis wird ausgelöst durch die Funktion in Zelle 'F1'

Denkste! Bei aktivierter automatischer Formelberechnung wird dieses Ereignis bei jeder Änderung eines Formelwertes ausgelöst.
Also besser das Makro an eine andere integrierte Ereignisprozedur koppeln, z.B. das Worksheet_Change().
Gruß Gerd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige