Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Objekt erforderlich
#1
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
Excel Version 2016
Antworten Top
#2
Hallo Thomas,
lade doch einmal ein Beispiel hoch ich baue kein Sheet nach.
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
Antworten Top
#3
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


Angehängte Dateien
.xls   oGv - Kopie (2).xls (Größe: 1,16 MB / Downloads: 3)
Excel Version 2016
Antworten Top
#4
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
Antworten Top
#5
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?
Excel Version 2016
Antworten Top
#6
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
Antworten Top
#7
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
Excel Version 2016
Antworten Top
#8
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
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
Antworten Top
#9
Hallo!

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

LG
Thomas
Excel Version 2016
Antworten Top
#10
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
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste