2017-02-15 2 views
0

Kann jemand bitte darauf hinweisen, was mit diesem Code-Schnipsel falsch ist? Jedes Mal, wenn ein Wert im angegebenen Bereich (A1: B6) geändert wird, wird Excel einfach mit dem Microsoft-Fehlerbericht beendet. Ich darf in den Excel-Einstellungen nicht die Option 'Fehlerprüfung (Hintergrund-Fehlerprüfung aktivieren)' deaktivieren.Excel beendet Worksheet_Change-Ereignis

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 
    Set KeyCells = Range("A1:B6") 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 
     Call Macro1 
     MsgBox "Test" 
    End If 
End Sub 

Makro1:

Sub Macro1() 

    Dim wb As Workbook 
    Dim wsData As Worksheet 
    Dim wsDest As Worksheet 
    Dim rInterestCell As Range 
    Dim rDest As Range 

    Set wb = ActiveWorkbook 
    Set wsData = wb.Sheets("Sheet1") 
    Set wsDest = wb.Sheets("Formula Results") 

    For Each rInterestCell In Range("Interest_Range").Cells 
     wsData.Range("A7").Value = rInterestCell.Value 
     wsData.Calculate  
     Set rDest = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1) 
     If rDest.Row < 6 Then Set rDest = wsDest.Range("A6") 
     rDest.Value = wsData.Range("A6").Value 
    Next rInterestCell 

End Sub 

zweite Makro

Sub Macro2() 
Dim FLrange As Range 
Set FLrange = Range(“Initial_Rate”) 

For Each cell In FLrange 
cell.Offset(0, 5).Formula = "=SUM(B3/100*A7)” 

Next cell 
End Sub 
+2

Haben Sie getan, wie es fragt und drehte sich auf die Überprüfung Hintergrund Fehler entdeckt? Das Problem könnte in Ihrem Macro1 liegen, haben Sie es mit F8 durchgegangen, um zu sehen, auf welcher Zeile es endet? –

+0

Versuchen Sie 'Application.EnableEvents = False' am ersten und' Application.EnableEvents = True' am Ende hinzuzufügen. – Fadi

+0

Warum hast du 'Range (Target.Address)', verwende einfach 'Target'. "Call Macro1" muss nicht einfach "Macro1" schreiben. Schreiben Sie für den Debug-Teil 'MsgBox 'Start'' vor 'Macro1' und' MsgBox "Finish" 'nach. Auf diese Weise wissen Sie, wo der Fehler von –

Antwort

1

Sie würden besser Ereignisse mit Application.EnableEvents = False, bevor Sie so viel Berechnung in Macro1 auszuschalten.

Wenn dies funktioniert, Kommentar nur MsgBox "Before Macro1" und MsgBox "After Macro1"

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 
    Set KeyCells = Me.Range("A1:B6") 

    If Not Application.Intersect(KeyCells, Target) Is Nothing Then 
     MsgBox "Before Macro1" 
     Macro1 
     MsgBox "After Macro1" 
    End If 
End Sub 

Makro1:

Sub Macro1() 
    Dim wB As Workbook 
    Dim wsData As Worksheet 
    Dim wsDest As Worksheet 
    Dim rInterestCell As Range 
    Dim rDest As Range 

    Set wB = ActiveWorkbook 
    Set wsData = wB.Sheets("Sheet1") 
    Set wsDest = wB.Sheets("Formula Results") 

    Application.EnableEvents = False 

    For Each rInterestCell In Range("Interest_Range").Cells 
     wsData.Range("A7").Value = rInterestCell.Value 
     wsData.Calculate 
     DoEvents 
     Set rDest = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1) 
     If rDest.Row < 6 Then Set rDest = wsDest.Range("A6") 
     rDest.Value = wsData.Range("A6").Value 
    Next rInterestCell 

    Application.EnableEvents = True 
End Sub 
+0

Leider hat das nicht geholfen. Könnte es mein zweites Makro sein? Es funktionierte einige Male gut, und dann änderte ich einen Zellwert unter dem angegebenen Zielbereich und es verursachte Excel abstürzen (unerwartet beendet). –

+0

@ zafira.404: Es ist wahrscheinlich, da die 'Worksheet_Change' ziemlich ordentlich ist. Haben Sie einen Fehler oder stürzt Excel einfach ab? Wird die 'Before Macro1' Nachricht angezeigt? Wird die Meldung 'After Macro1' angezeigt? – R3uK

+0

Es wurde keine MsgBox 'angezeigt, es wird nur mit' Es gab ein Problem beendet und Microsoft Excel wurde geschlossen. Wir entschuldigen uns für die Unannehmlichkeiten‘mit‚Weitere Informationen‘Schaltfläche mit dem folgenden Protokoll: ‚ Fehlersignatur: Ausnahme: EXC_BAD_INSTRUCTION und‘Crashed Thema: 0 abgefangene ObjC Ausnahme Grund: - [NSAlert runModal] kann nicht sein, Wird innerhalb der Transaktion Commit aufgerufen (normalerweise bedeutet dies, dass es innerhalb der view-drawRect: -Methode aufgerufen wurde.) " –

Verwandte Themen