2016-10-27 5 views
1

Ich versuche gerade, ein VBA-Modul aufzurufen, wenn der Benutzer eine meiner Formeln auf einem Blatt überschreibt. Ich denke, dass das Worksheet Change Event ausgelöst wird, aber dann erhalte ich den Laufzeitfehler 424 ("Objekt erforderlich"), wenn ich das Modul ausführe. Ich bin mir nicht sicher, was ich falsch mache?Laufzeitfehler 424-Objekt erforderlich, wenn versucht wird, Code auszulösen

Hier ist mein Arbeitsblatt ändern Ereigniscode:

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("Award_Amount")) Is Nothing Then 
Call Award_Amount_Entered 
End If 

If Not Intersect(Target, Range("Award_two_Amount")) Is Nothing Then 
Call Award_two_Amount_Entered 
End If 
End Sub 

Hier ist der Code in das Modul Ich rufe:

Sub Award_Amount_Entered() 

    'If the user has overwritten the formula that was just in the cell 

If ActiveCell.HasFormula = False Then 
Applicaton.Intersect((Rows(ActiveCell.Row)), Range("AA:AA")).Select 

....run some more code 

End If 

End Sub 

Wenn das Debuggen, vba unterstreicht die letzte Zeile des obigen Codes: Anwendung .Intersect ((Zeilen (ActiveCell.Row)), Bereich ("AA: AA")) Wählen Sie

Ich bin mir sicher, dass dies früher funktioniert! Mache ich etwas falsch?

Vielen Dank im Voraus, dass Sie sich die Zeit genommen haben, dies zu lesen!

Tina

+0

Versuchen vollständig die Reihen Eigenschaft qualifizieren. – Brian

+2

Sie haben Anwendung falsch geschrieben. – Brian

+1

Im Sheet-Code-Modul werden alle Range() - und Cells() -Aufrufe standardmäßig auf das Sheet-Objekt angewendet, aber das gilt nicht für Code in einem regulären Modul. Daher wäre es sinnvoll, dort genauer zu sein. –

Antwort

0

Einige Vorschläge im Code kommentiert:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range 

    Set rng = Intersect(Target, Me.Range("Award_Amount")) 

    If Not rng Is Nothing Then 
     Award_Amount_Entered rng  '<<< pass rng to the called procedure 
    End If 

    Set rng = Intersect(Target, Me.Range("Award_two_Amount")) 

    If Not rng Is Nothing Then 
     Award_two_Amount_Entered rng '<<< pass rng to the called procedure 
    End If 


End Sub 

Genannt Sub:

Sub Award_Amount_Entered(rng As Range) 

    Dim c As Range, c2 As Range 

    'Remember, Target can be a multi-cell range, so loop over 
    ' all of the cells in the "rng" parameter... 

    On Error GoTo haveError 'handle any errors 

    For Each c In rng.Cells 
     'If the user has overwritten the formula that was just in the cell 
     If Not c.HasFormula Then 

      'Use a range variable instead of selecting the cell 
      ' and then operating on the selection 
      Set c2 = c.EntireRow.Cells(1, "AA") 

      'If you're going to update the sheet here then it's good practice 
      ' to disable events 
      Application.EnableEvents = False 
      'update sheet 
      Application.EnableEvents = True 

     End If 
    End If 
    Exit Sub 

haveError: 
    'If your code errors you need to make sure you re-enable events 
    ' (at the very least) before exiting 
    Application.EnableEvents = True 

End Sub 
Verwandte Themen