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

Code extrem langsam

Code extrem langsam
24.03.2020 10:26:40
Marc
Hallo zusammen
Ich habe folgenden Code, welcher extrem langsam ist. Sieht jemand eine Möglichkeit diesen zu optimieren?
Vielen Dank für eure Hilfe.
Beste Grüsse Marc

Private Sub Chart_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y  _
_
_
As Long)
Dim ElementID As Long, SeriesIndex As Long, PointIndex As Long
Dim s As Series, i As Integer, J As Integer, Form As String
Dim CellX As Range, CellY As Range
Dim wb As Workbook, mafi As Workbook
On Error Resume Next
Set pruefblatt = ThisWorkbook.Sheets("Einzeldat")
If Err.Number  0 Then Exit Sub
On Error GoTo 0
If ThisWorkbook.Sheets("Steuerung").Range("B11") = "Nein" Then Exit Sub
diemappedoheisst = ThisWorkbook.Name
If ActiveWorkbook.Name = diemappedoheisst Then
Set wb = ActiveWorkbook
ActiveChart.GetChartElement x, y, ElementID, SeriesIndex, PointIndex
If ElementID = xlSeries And (SeriesIndex = 1 Or SeriesIndex = 9) Then
Form = ActiveChart.SeriesCollection(SeriesIndex).Formula
i = InStr(1, Form, ",") + 1
J = InStr(i, Form, ",") + 1
Set CellX = Range(Mid$(Form, i, J - i - 1))(PointIndex)
Alter = CellX(1, 1)
Lohn = CellX(1, 5) 'Spalte in Filterblatt (hier "sel") relativ zur Alterspalte
AnzZeilen = WorksheetFunction.Count(wb.Sheets("EINZELDAT").Range("B:B"))
Treffer = 0
For i = 1 To 25
NRF = "@" & wb.Sheets("Steuerung").Range("I24").Offset(i)
If NRF  "" Then
For Z = 1 To AnzZeilen
aktjahr = Year(Now())
Alteri = wb.Sheets("EINZELDAT").Range("O1").Offset(Z)
Lohni = wb.Sheets("EINZELDAT").Range("F1").Offset(Z)
NRFi = "@" & wb.Sheets("EINZELDAT").Range("D1").Offset(Z)
If IsError(NRFi) = False Then
If Alteri = Alter And Lohni = Lohn And NRFi = NRF Then
Treffer = Treffer + 1
Msg_Txt = Msg_Txt & vbLf & "Pers.Nr. " & wb.Sheets("EINZELDAT").Range("A1").Offset(  _
_
_
Z) & ": " & _
" " & wb.Sheets("EINZELDAT").Range("H1").Offset(Z) & ", " & wb.Sheets("EINZELDAT") _
_
_
.Range("I1").Offset(Z) & Chr(10) & _
"OE: " & wb.Sheets("EINZELDAT").Range("K1").Offset(Z) & Chr(10) & _
"Stelle (untergeordnet): " & wb.Sheets("EINZELDAT").Range("J1").Offset(Z) & Chr(   _
_
_
10) & _
"Funktion (übergeordnet): " & wb.Sheets("EINZELDAT").Range("D1").Offset(Z) & Chr(  _
_
_
10) & _
"Geschlecht: " & wb.Sheets("EINZELDAT").Range("C1").Offset(Z)
End If
End If
Next Z
End If
Next i
MsgBox "Total Treffer: " & Treffer & Chr(13) & vbLf & Msg_Txt
End If
End If
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code extrem langsam
24.03.2020 11:02:27
Sascha
Du könntest den Befehl "Application.ScreenUpdating = False" einfügen. Dieser kommt ganz oben an deinen Code und den gegenteiligen mit "Application.ScreenUpdating = True" kommt zum Schluss. Aktuell sieht es so aus, als ob deine Oberfläche nach jedem Arbeitsschritt sich erst akualisieren muss. Dieser Befehl disabled das, und macht die Aktualisierung erst wenn der komplette Code durchgearbeitet ist.
Hoffe das funktioniert so.
Gruß Sascha
AW: Code extrem langsam
24.03.2020 11:04:49
Herbert
Hallo Marc,
vielleicht könnte man deinen Code ja beschleunigen, aber ohne die dazugehörige Datei ganz sicher nicht! Und bitte nicht "es geht nicht, sensible Daten"! Dann musst du dir eben die Mühe machen, die sensiblen durch unsensible zu ersetzen!
Servus
Anzeige
AW: Code extrem langsam
24.03.2020 11:30:48
Daniel
Hi
Neben der Beispieldatei:
Was soll denn der code machen und um welche Datenmengen geht es?
Mir scheint die Schleifenschachtelung auf den ersten Blick ungünstig.
Wahrscheinlich kannst du den Aufwand reduzieren, wenn du innere und äussere Schleife tauschst.
Generell sollte man darauf achten, in einer Schleife nur das zu tun, was direkt von den schleifenzählern abhängt und die sich über den Schleifenverlauf ändern.
Alles andere sollte außerhalb der Schleifen berechnet werden, um unnötige Wiederholungen zu vermeiden.
Das Beispiel in deinem Code wäre aktjahr = Year(Now())
Das hat in der Schleife nichts zu suchen. ( es sei denn, der Code ist so langsam, dass er über den Jahreswechsel läuft)
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige