Clever-Excel-Forum

Normale Version: Objekt erforderlich
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Guten Morgen!

Ich habe folgendes Problem, wenn ich ein Makro ausführen will, es kommt immer die Fehlermeldung:

Laufzeitfehler 424 - Objekt erforderlich

Es geht um folgenden Code: 

Code:
Sub AuszahlungenSpalteCaktualisiert()

With ActiveWorkbook.Worksheets("Auszahlungen")
               

                If Month(Target.Offset(0, 0)) < Month(Date) And .Range("EP2").Value > .Range("EP5").Value And Range("ER2").Value < .Range("EK5").Value And Worksheets("Jahresstatistik").Range("AH1").Value = 1 Then 'Monat in Spalte C kleiner als das aktuelle Monat, am meisten Auszahlungsbeantragungen pro Monat aber kein bester Beantragungsmonat und Vergleich mit Vorjahr möglich'
                    MsgBox "Du hast im " & Format(.Range("EQ2").Value, "MMMM YYYY") & " insgesamt am meisten Auszahlungen beantragt, nämlich " & .Range("EP2").Value & " in Höhe von € " & Format(.Range("ER2").Value, "#,##0.00") & "."
                    .Range("EI5").Value = .Range("EI2").Value 'bester Beantragungsmonat - Datum'
                    .Range("EK5").Value = .Range("EK2").Value 'bester Beantragungsmonat - Beantragungsbetrag'
                    .Range("EP5").Value = .Range("EP2").Value 'am meisten Auszahlungsbeantragungen pro Monat'

                End If

End With

End Sub

Das Makro AuszahlungenSpalteCaktualisiert habe ich deswegen erstellt bzw. ausgelagert, weil ich in einem anderen Sheet mit Private Sub Worksheet_Change(ByVal Target As Range) immer die Fehlermeldung bekommen habe: 

Prozedur zu groß

Darum habe ich in dem Sheet mit Private Sub Worksheet_Change(ByVal Target As Range) den Code auslagern wollen, der wie folgt aussieht:

Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'Wenn etwas geändert wird'

If Target.Column = 3 Then 'in Spalte C (Datum) sich was ändert'

  AuszahlungenSpalteCaktualisiert

End If

End Sub

Ich hoffe, dass mir jemand helfen kann.

LG
Thomas

Hallo!

Ich habe gerade gesehen, dass der Befehl "Target" nur in einem Ereignismakro zur Verfügung steht, nicht in einer normalen Sub. Darum diese Fehlermeldung.
Meine Frage wäre nun, wie kann ich dieses Makro trotzdem zum Laufen bringen?
Wie gesagt, dass Ursprungsproblem ist eigentlich die Fehlermeldung "Prozedur zu groß".

LG
Thomas
Hallo Thomas,
lade doch einmal ein Beispiel hoch ich baue kein Sheet nach.
Hallo!

Ich habe dir eine Beispieldatei hochgeladen, die anderen Tabellenblätter und Makros habe ich entfernt, welche nicht für dieses Problem relevant sind.
Am besten kann man es testen, wenn man in der Zelle C594 das Datum ändert, dann müsste sich in der Zelle I594 der Wert von "n" auf "j" ändern. Wenn es das tut, dann funktioniert es.

Danke dir jetzt schon.

LG
Thomas
Hallo,

ohne die Datei zu kennen:

Zitat:Sub AuszahlungenSpalteCaktualisiert()

With ActiveWorkbook.Worksheets("Auszahlungen")


If Month(Target.Offset(0, 0))

"Target" ist nur in Event-Prozeduren definiert.

mfg
ja, genau das ist das Problem
und wie kann ich das lösen? ich habe eine Datei als Beispiel hochgeladen
wie könnte man das Sheet "Auszahlungen" aufteilen, damit ich das Problem mit "prozedur zu groß" nicht bekomme, wenn ich z.B. eine weiteres "If" einfüge?
Hallo,

was mich jetzt wundert ist das hier: Wie gesagt, dass Ursprungsproblem ist eigentlich die Fehlermeldung "Prozedur zu groß".

Wie sieht denn diese "ursprüngliche" Prozedur aus?

Gruß Werner
Hallo!

Wenn ich im Sheet "Auszahlungen" eine weitere If Methode einbaue, komme folgende Fehlermeldung:

Prozedur zu groß

Darauf hin habe ich einen Teil vom Code als eigenes Modul ausgelagert, was auch nicht funktioniert, da der Befehl "Target" anscheinend nicht in einem Einzelmodul stehen kann.
Das sind nun meine Probleme.

Ich würde eine 2. Private Sub Worksheet_Change(ByVal Target As Range) im Tabellenblatt "Auszahlungen" benötigen, nur  lässt Excel das nicht zu.

Ich hoffe, dass mir jemand helfen kann.

LG
Thomas
Hallo Wener,
wozu hast Du die If-Anweisung 8-mal untereinander stehen?
Wenn ich es richtig sehe ist das 8-mal das gleiche.
Einmal würde reichen!

Code:
Sub AuszahlungenSpalteCaktualisiert()

With ThisWorkbook.Worksheets("Auszahlungen")
    ActiveCell.Offset(0, 3) = "j"
    If Month(ActiveCell.Value) < Month(Date) And _
        .Range("EP2").Value > .Range("EP5").Value And _
        .Range("ER2").Value < .Range("EK5").Value And _
        Worksheets("Jahresstatistik").Range("AH1").Value = 1 Then
        'Monat in Spalte C kleiner als das aktuelle Monat,
        'am meisten Auszahlungsbeantragungen pro Monat aber kein bester Beantragungsmonat und Vergleich mit Vorjahr möglich'
        MsgBox "Du hast im " & Format(.Range("EQ2").Value, "MMMM YYYY") & " insgesamt am meisten Auszahlungen beantragt, nämlich " & .Range("EP2").Value & " in Höhe von € " & Format(.Range("ER2").Value, "#,##0.00") & "."
        .Range("EI5").Value = .Range("EI2").Value 'bester Beantragungsmonat - Datum'
        .Range("EK5").Value = .Range("EK2").Value 'bester Beantragungsmonat - Beantragungsbetrag'
        .Range("EP5").Value = .Range("EP2").Value 'am meisten Auszahlungsbeantragungen pro Monat'
    End If
End With
End Sub
Hallo!

Wenn man sie sich genau anschaut, sind sie nicht gleich, die haben unterschiedliche Prüfungen und MsgBoxen.

LG
Thomas
Hallo Thomas,
ok die Prüfungen sind unterschiedlich da hast Du recht.
Für Target schreibe ActiveCell.Value

In dieser Zeile steht ein Range ohne Punkt, dass ist wahrscheinlich nicht gut, denn jetzt bezieht sich die Angabe von Range auf jede beliebige Tabelle. Also mit Punkt?
Code:
If Month(ActiveCell.Value) < Month(Date) And .Range("EP2").Value = .Range("EP4").Value And [color=#E82A1F]Range("ER2").Value[/color] < .Range("EK5").Value And
Seiten: 1 2