Performance verbessern
06.06.2017 15:40:17
Jann
Ich benutze seit Donnerstag Excel 2016 (Vorher 2003). Durch die Umstellung (zumindest ist das vermutlich der Grund) ist mein kleines Programm erheblich langsamer geworden. Ich habe hier mal beispielhaft eine Funktion aus dem Programm gepostet.
Auf dem Tabellenblatt "Formular" ist eine Art Eingabemaske. In einem weiteren Tabellenblatt "Fragen" ist eine Liste von 400 Zeilen mit Parametern, mit denen das Tabellenblatt "Formular" befüllt wird, bzw. welche durch Daten aus der Eingabemaske selbst befüllt wird. "Fragen" dient also quasi als Datenbank.
Die Funktion "vor()" sucht in der Tabelle "Fragen" nach den nächsten Daten zum Befüllen der Eingabemaske, abhängig von den aktuellen Daten, dem "Bearbeiter" und der "Sparte" (Globale Variablen).
Außerdem werden abhängig von den Daten Hyperlinks zu bestimmten Dateien eingefügt.
Da ich kein VBA-Profi bin, wollte ich mal grundsätzlich fragen, ob mein Code totaler Mist ist oder zumindest an der ein oder anderen Stelle verbessert werden kann um die Geschwindigkeit des Programms zu erhöhen.
Außerdem habe ich das Gefühl, dass das "Application.ScreenUpdating = False" kaum Auswirkungen hat. Mache ich da einen Fehler?
Habt ihr andere Tipps um die Performance zu verbessern?
Vielen Dank schon im Voraus. Ich hoffe ihr könnt mir helfen.
Sub vor()
Dim i As Integer
Dim j As Integer
Application.ScreenUpdating = False
Call Speichern
Call BlattschutzAus
Call Datei_Anzeige_löschen
'Zeile suchen:
For i = 2 To 424
If Worksheets("Fragen").Cells(i, 1) = Worksheets("Formular").Cells(4, 4) And Worksheets( _
_
"Fragen").Cells(i, 4) = Worksheets("Formular").Cells(4, 2) Then
Exit For
End If
Next i
j = i + 1
If j = 425 Then j = 2
Do
If Worksheets("Fragen").Cells(j, 6) = Bearbeiter Or Bearbeiter = "" Then
If Worksheets("Fragen").Cells(j, 4) = sparte Or sparte = "" Then
With Worksheets("Formular")
.Cells(4, 6).Interior.Color = Worksheets("Fragen").Cells(j, 6).Interior.Color
.Cells(4, 2) = Worksheets("Fragen").Cells(j, 4)
.Cells(4, 6) = Worksheets("Fragen").Cells(j, 6)
.Cells(4, 4) = Worksheets("Fragen").Cells(j, 1)
.TextBox3.Value = Worksheets("Fragen").Cells(j, 7)
.TextBox2.Value = Worksheets("Fragen").Cells(j, 5)
.Cells(7, 2) = Worksheets("Fragen").Cells(j, 2)
End With
Application.ScreenUpdating = False
Call Dateisuche(Worksheets("Fragen").Cells(j, 3), Worksheets("Fragen").Cells(j, 4))
Call Dateisuche2(Worksheets("Fragen").Cells(j, 1), Worksheets("Fragen").Cells(j, 4)) _
_
Application.ScreenUpdating = True
Exit Do
End If
End If
j = j + 1
If j > 424 Then
j = 2
End If
Loop
Call Blattschutz
Application.ScreenUpdating = True
End Sub
Sub Speichern()
Call BlattschutzAus
Dim i As Integer
For i = 1 To 424
If Worksheets("Fragen").Cells(i, 1) = Worksheets("Formular").Cells(4, 4) And _
Worksheets("Fragen").Cells(i, 4) = Worksheets("Formular").Cells(4, 2) Then
Worksheets("Fragen").Cells(i, 7) = Worksheets("Formular").TextBox3.Value
Exit For
End If
Next i
Call Blattschutz
End Sub
Sub Datei_Anzeige_löschen()
Application.ScreenUpdating = False
Dim i As Integer
For i = 10 To 24
Worksheets("Formular").Cells(i, 10) = ""
Next i
For i = 32 To 46
Worksheets("Formular").Cells(i, 10) = ""
Next i
Application.ScreenUpdating = True
End Sub