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

VBA zu langsam

VBA zu langsam
23.08.2016 11:01:53
Holger
Guten Tag zusammen,
bin sehr neu und leider habe ich so gut wie keine Ahnung von VBA!
Habe allerdings ein Problem, dass ich diser Code dazu führt, dass mein Excel zu lange laden tut. Könnte mir evtl. jeamand helfen, dass Problem zu lösen.
Die Tabelle geht bis B90!
Sub Worksheet_Activate()
If Trim(Range("b8")) = "" Then Rows(8).EntireRow.Hidden = True
IF Trim(Range("b8")) "" Then Rows(8).EntireRow.Hidden = False
If Trim(Range("b9")) = "" Then Rows(9).EntireRow.Hidden = True
If Trim(Range("b9")) "" Then Rows(9).EntireRow.Hidden = False
If Trim(Range("b10")) = "" Then Rows(10).EntireRow.Hidden = True
If Trim(Range("b10")) "" Then Rows(10).EntireRow.Hidden = False
If Trim(Range("b11")) = "" Then Rows(11).EntireRow.Hidden = True
If Trim(Range("b11")) "" Then Rows(11).EntireRow.Hidden = False
If Trim(Range("b12")) = "" Then Rows(12).EntireRow.Hidden = True
If Trim(Range("b12")) "" Then Rows(12).EntireRow.Hidden = False
If Trim(Range("b13")) = "" Then Rows(13).EntireRow.Hidden = True
If Trim(Range("b13")) "" Then Rows(13).EntireRow.Hidden = False
If Trim(Range("b14")) = "" Then Rows(14).EntireRow.Hidden = True
If Trim(Range("b14")) "" Then Rows(14).EntireRow.Hidden = False
If Trim(Range("b15")) = "" Then Rows(15).EntireRow.Hidden = True
If Trim(Range("b15")) "" Then Rows(15).EntireRow.Hidden = False
If Trim(Range("b16")) = "" Then Rows(16).EntireRow.Hidden = True
If Trim(Range("b16")) "" Then Rows(16).EntireRow.Hidden = False
If Trim(Range("b17")) = "" Then Rows(17).EntireRow.Hidden = True
If Trim(Range("b17")) "" Then Rows(17).EntireRow.Hidden = False
If Trim(Range("b18")) = "" Then Rows(18).EntireRow.Hidden = True
If Trim(Range("b18")) "" Then Rows(18).EntireRow.Hidden = False

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

Betreff
Datum
Anwender
Anzeige
AW: VBA zu langsam
23.08.2016 11:23:36
baschti007
Guck mal ob das so geht Gruß Basti
Sub Bla()
For i = 8 To 90
x = Trim(Range("b" & i))
If Trim(Range("b" & i)) = "" Then Rows(i).EntireRow.Hidden = True
If Trim(Range("b" & i))  "" Then Rows(i).EntireRow.Hidden = False
Next
End Sub

AW: VBA zu langsam
23.08.2016 11:26:56
Luschi
Hallo Holger,
seit Excel 2003 erzwingt jeder Einblenden/Ausblenden-Befehl das Neuberechnen aller geöffneneten Excel-Arbeitsmappen; siehe:
https://support.microsoft.com/de-de/kb/918621
baue deshalb diese Vba-Routine in einem normalen Modul ein:

Public Sub Get_More_Speed(Optional ByVal An As Boolean = True)
With Application
If An Then
.Calculation = xlCalculationManual
.DisplayAlerts = False
.EnableCancelKey = xlDisabled
.EnableEvents = False
.Interactive = False
.ScreenUpdating = False
Else
.Calculation = xlCalculationAutomatic
.DisplayAlerts = True
.EnableCancelKey = xlInterrupt
.EnableEvents = True
.Interactive = True
.ScreenUpdating = True
End If
End With
End Sub
und starte jetzt so:

Sub Worksheet_Activate()
Call Get_More_Speed
IF Trim(Range("b8")) = "" Then
Rows(8).EntireRow.Hidden = True
Else
Rows(8).EntireRow.Hidden = False
EndIf
'u.s.w.
Call Get_More_Speed(False)
Gruß von Luschi
aus klein-Paris
PS; siehe auch: http://www.online-excel.de/fom/fo_read.php?f=1&bzh=21803&h=21803
Anzeige
AW: VBA zu langsam
23.08.2016 11:28:01
ChrisL
Hi Holger
Ich denke ScreenUpdating = False könnte helfen. Ansonsten überlege dir, ob du nicht besser mit Autofilter arbeitest.
Private Sub Worksheet_Activate()
Dim i As Integer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Rows("8:90").EntireRow.Hidden = False
For i = 8 To 90
If Trim(Cells(i, 2)) = "" Then Rows(i).EntireRow.Hidden = True
Next i
Application.Calculation = xlCalculationAutomatic
End Sub

cu
Chris
AW: VBA zu langsam
23.08.2016 11:30:38
Daniel
Hi
Optimierung Stufe 1:
für jede Excelzeile reicht eine Programmzeile:
Rows(8).Hidden = (Range("B8") = "")
Rows(9).Hidden = (Range("B9") = "")
Optimierung Stufe 2:
nicht jede Zeilen einzeln ein- und ausblenden, sondern:
1. alles einblenden
2. alles, was ausgeblendet werden muss in einer Range-Variable sammeln und dann die Zeilen gemeinsam ausblenden:
dim Bereich as range
dim Zelle as Range
range("8:90").entireRow.hidden = false
for  each Zelle in Range("B8:B90")
if Trim(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
Optimierung Stufe 3:
Autofilter verwenden, (wobei das nur funktioniert, wenn die Zellen auch wirklich leer sind und das TRIM eigentlich überflüssig wäre):
Range("B7:B90").Autofilter Field:=1, Criteria1:=""
Gruß Daniel
Anzeige
AW: VBA zu langsam
23.08.2016 13:02:21
Holger
Vielen Dank Daniel!
Optiemirung 1 geht wirklich schneller mit.
Optiemirung 2 muss ich noch irgentwie testen. Habe ich noch nicht hinbekommen.
Optiemirung 3 wäre evtl. auch eine alternative.
Vielen Dank für deine Super Hilfe
AW: VBA zu langsam
24.08.2016 02:24:23
Holger
hallo nochmals
die 2 variante ist perfekt.
ich danke dir vielmals.
danke das es helfer gibt
gruss
holger
AW: Crossposting ohne Hinweis darauf
23.08.2016 11:45:07
Werner
Hallo Holger,
wenn schon Crossposting, dann in den verschiedenen Foren bitte auch einen Hinweis darauf. Sonst kann es passieren, dass die Helfer für den Papierkorb arbeiten.
Wobei sich mir die grundsätzliche Frage stellt warum? Wurdest du das auch machen wenn du für die Hilfe bezahlen müßtest?
http://www.vba-forum.de/Forum/View.aspx?ziel=29937-vba_zu_langsam
Gruß Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige