VisualBasic Einfaches Makro Code läuft langsam - Abstürze Excel

Dr. Wuah

Lt. Commander
Registriert
Mai 2005
Beiträge
1.277
Hallo zusammen,

ich hoffe mir kann jemand weiterhelfen. Ich hab gerade auf die schnelle ein Dokument erstellt, dass für die Urlaubsberechnung helfen soll. Zuerst einmal, die Idee:
Es gibt 5 Spalten:
1. Spalte: Beschreibung der Kosten
2. Spalte: Euro Betrag
3. Spalte: Betrag pro Person - Euro (insgesamt 8 Personen)
4. Spalte: Ausländische Währung
5. Spalte: Betrag pro Person - ausländische Währung

Funktionalität des Makros:
Wenn in Spalte 2 oder in Spalte 3 ein Wert eingetragen wird, dann werden entsprechend die anderen 3 Spalten mit Beträgen automatisch gefüllt. Das klappt grundsätzlich auch ohne Probleme. Allerdings verursacht das Makro irgendwie Performanceprobleme. Excel selbst ist sogar schon abgestürzt. Immer nachdem ein Wert eingetragen und die entsprechenden anderen Spalten befüllt waren, wird eine kurze Zeit nicht mehr auf Eingaben reagiert.

Woran könnte das liegen?!

Hier der Code:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim result As Double
    Dim hilf As Double
    Dim exchange As Double
    
    'zuweisen
    exchange = Range("I2")
    
    'definiert welche Zellen ein Event triggern
    Set KeyCells = Range("B3:B50", "D3:D50")
    
    'Nichts passiert, wenn andere Zellen geändert werden
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
        
        'MsgBox "Test: " & Target.Address & " - " & Target.Row
        
        hilf = Range(Target.Address)
        
        'Wenn Spalte B geändert wird:
        If (Target.Column = 2) Then
            result = hilf * exchange
            Range("D" & Target.Row) = result
        End If

        'Wenn Spalte D geändert wird:
        If (Target.Column = 4) Then
            result = hilf / exchange
            Range("B" & Target.Row) = result
        End If
        
        'p.P Werte ausrechnen:
        hilf = Range("B" & Target.Row)
        result = hilf / 8
        Range("C" & Target.Row) = result
        
        hilf = result * exchange
        Range("E" & Target.Row) = result
        
    End If

End Sub
 
@
Officeprogramme h
 
Wenn du innerhalb des Worksheet_Change Events eine Zelle änderst, löst du wiederum das Event aus.
Du musst am Anfang des Codes Application.EnableEvents auf False und am Ende dementsprechend wieder auf True setzen.
 
Diablobase - vielen Dank für den Tipp, das war das Problem. Damit ist der Fehler behoben, daran habe ich gar nicht gedacht!
 
Füge am besten noch eine Fehlerbehandlung ein in der du das EnableEvents dann wieder auf True setzt, sollte in deiner Funktion ein Laufzeitfehler passieren bleibt das EnableEvents auf False und du musst erst Excel schließen und wieder öffnen damit es wieder funktioniert.
 
Zurück
Oben