VBA Laufzeitfehler 1004

Moderator: ModerationP

VBA Laufzeitfehler 1004

Beitragvon Chris92mw » 27. Sep 2021, 13:53

Hi Zusammen,

ich habe in einem Tabellenblatt folgenden Code:
Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("F1:F200"), Target) Is Nothing Then Exit Sub
 Target.Offset(0, -3).Value = Date
End Sub


Nun erhalte ich beim Einfügen einer Zeile immer die Fehlermeldung "Laufzeitfehler '1004': Anwendungs- oder ojektdefinierter Fehler.
Ein Passwortschutz oder ähnliches habe ich nicht auf dem Tabellenblatt.

Hat jemand eine Idee wie ich es lösen kann?

BG
Christian
Chris92mw
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 27. Sep 2021, 13:50

Re: VBA Laufzeitfehler 1004

Beitragvon daNorbert » 27. Sep 2021, 14:31

Hallo,

wenn Du einen größeren Bereich einfügst (z.B. durch Copy Paste) bei der mehrere Spalten inkludiert sind
kannst Du bei Offset -3 auf eine Spalte kommen, die "vor A" liegt.
Würde da nur auf den Bereich F Deiner Änderung reagieren.

Wenn Du Werte in einem Event, das auf Änderung reagiert Änderst ist es immer gut, vorher die Events auszuschalten.
Dann löst die Programmänderung das OnChange Event nicht nochmals erneut aus.

Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("F1:F200"), Target) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    'Target.Offset(0, -3).Value = Date
    Intersect(Range("F1:F200"), Target).Offset(0, -3).Value = Date
    Application.EnableEvents = True
End Sub


LG
Norbert
daNorbert
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 939
Registriert: 09. Sep 2010, 14:20

Re: VBA Laufzeitfehler 1004

Beitragvon Chris92mw » 28. Sep 2021, 07:09

Hallo Norbert,

danke für deine hilfreiche Antwort. Funktioniert soweit schon einmal ohne Fehlermeldung.
Hast du noch einen Tipp, wie ich den Code so anpasse, dass das Datum nicht bei einfügen einer neuen Zeile bereits geschrieben wird, sondern wirklich nur wenn in Spalte F Werte geschrieben werden?

Danke im Voraus :)
Chris92mw
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 27. Sep 2021, 13:50

Re: VBA Laufzeitfehler 1004

Beitragvon hddiesel » 28. Sep 2021, 07:24

Hallo Chris,

passt das?
Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("F1:F" & Cells(Rows.CountLarge, "F").End(xlUp).Row), Target) Is Nothing Then
        Application.EnableEvents = False
        Target.Offset(0, -3).Value = Date   'Statt so,
'        Cells(Target.Row, 3).Value = Date   'würde es auch mit einer festen Spaltenangabe passen
        Application.EnableEvents = True
    End If
End Sub
Mit freundlichen Grüssen
Karl


BS: Windows 10_64-Bit, MS Office Professional Plus 2016_32-Bit, incl. Microsoft Visual Basic for Applications 7.1
Benutzeravatar
hddiesel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4246
Registriert: 17. Feb 2006, 11:40
Wohnort: Deutschland

Re: VBA Laufzeitfehler 1004

Beitragvon Chris92mw » 28. Sep 2021, 07:39

Hi,

Leider nicht. Wenn ich deinen Code 1zu1 kopiere erhalte ich beim Zeile einfügen wieder den Laufzeitfehler 1004 und beim Schreiben in eine Zelle der Spalte F wird auch kein Datum gesetzt.

Trotzdem danke. Vielleicht habe ich auch was falsch gemacht.

Gruß
Christian
Chris92mw
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 27. Sep 2021, 13:50

Re: VBA Laufzeitfehler 1004

Beitragvon hddiesel » 28. Sep 2021, 07:42

Hallo Chris,

welche Excelversion hast du?

Bei älteren Excelversionen, muss CountLarge in Count geändert werden.
Mit freundlichen Grüssen
Karl


BS: Windows 10_64-Bit, MS Office Professional Plus 2016_32-Bit, incl. Microsoft Visual Basic for Applications 7.1
Benutzeravatar
hddiesel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4246
Registriert: 17. Feb 2006, 11:40
Wohnort: Deutschland

Re: VBA Laufzeitfehler 1004

Beitragvon Chris92mw » 28. Sep 2021, 07:46

Hi,

es handelt sich um eine O365 Version. Version 2108 benutze ich.
Chris92mw
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 27. Sep 2021, 13:50

Re: VBA Laufzeitfehler 1004

Beitragvon hddiesel » 28. Sep 2021, 07:50

Hallo Chris,

dann mit Zusatzabfrage:
Code: Alles auswählen
If Target.Cells.CountLarge > 1 Then Exit Sub

Mit folgender Änderung.
Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("F1:F" & Cells(Rows.CountLarge, "F").End(xlUp).Row), Target) Is Nothing Then
        If Target.Cells.CountLarge > 1 Then Exit Sub
        Application.EnableEvents = False
        Target.Offset(0, -3).Value = Date   'Statt so,
'        Cells(Target.Row, 3).Value = Date   'würde es auch mit einer festen Spaltenangabe passen
        Application.EnableEvents = True
    End If
End Sub
Mit freundlichen Grüssen
Karl


BS: Windows 10_64-Bit, MS Office Professional Plus 2016_32-Bit, incl. Microsoft Visual Basic for Applications 7.1
Benutzeravatar
hddiesel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4246
Registriert: 17. Feb 2006, 11:40
Wohnort: Deutschland

Re: VBA Laufzeitfehler 1004

Beitragvon Chris92mw » 28. Sep 2021, 08:06

Hallo,

ich weiß zwar nicht im Detail warum es vorher nicht ging, und was der Zusatz jetzt bewirkt, aber es funktioniert :)
perfekt, danke!
Chris92mw
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5
Registriert: 27. Sep 2021, 13:50

Re: VBA Laufzeitfehler 1004

Beitragvon hddiesel » 28. Sep 2021, 08:41

Hallo Chris,

der Fehler trat auf, da eine oder mehrere Zeilen eingefügt wurden und
Code: Alles auswählen
Target.Offset(0, -3)

dadurch mindestens 3 Spaltenangaben (A, B, C).Offset(0, -3) kleiner Spalte A liegen und das führt zu einem Fehler.

Mit folgender Änderung (einer festen Spaltenangabe), können auch mehrere Zeilen oder Zellen eingefügt werden,
jedoch nur in der aktiven Zeile wird ein Datum eingefügt, wenn in der aktiven Zeile in der Spalte F ein Wert steht und es gibt auch keine Fehlermeldung.
Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("F1:F" & Cells(Rows.CountLarge, "F").End(xlUp).Row), Target) Is Nothing Then
        Application.EnableEvents = False
        Cells(Target.Row, 3).Value = Date   'Mit einer festen Spaltenangabe
        Application.EnableEvents = True
    End If
End Sub
Mit freundlichen Grüssen
Karl


BS: Windows 10_64-Bit, MS Office Professional Plus 2016_32-Bit, incl. Microsoft Visual Basic for Applications 7.1
Benutzeravatar
hddiesel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4246
Registriert: 17. Feb 2006, 11:40
Wohnort: Deutschland

Re: VBA Laufzeitfehler 1004

Beitragvon HKindler » 28. Sep 2021, 10:46

Hi,

ich würde das ja so schreiben:
Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Dim Zelle As Range
Set Bereich = Intersect(Range("F:F"), Target)
    If Not Bereich Is Nothing Then
        Application.EnableEvents = False
            For Each Zelle In Bereich
                If Zelle <> "" Then
                    If Zelle.Offset(0, -3) = "" Then
                        Zelle.Offset(0, -3) = Date
                    End If
                Else
                    Zelle.Offset(0, -3).ClearContents
                End If
            Next Zelle
        Application.EnableEvents = True
    End If
End Sub
Hier ist es völlig egal, wie viele Zellen geändert/eingefügt werden. Immer wenn in Spalte F etwas geschieht, wird in jeder betroffenen Zelle der Spalte F geprüft, ob etwas drin steht. Wenn ja, wird das aktuelle Datum 3 Zellen weiter links (Spalte C) gesetzt (sofern noch keines gesetzt war), wenn nein, wird es gelöscht.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6313
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: VBA Laufzeitfehler 1004

Beitragvon hddiesel » 28. Sep 2021, 12:37

Hallo Chris,

eines hatte ich nicht berücksichtigt.
Hast du noch einen Tipp, wie ich den Code so anpasse,
dass das Datum nicht bei einfügen einer neuen Zeile bereits geschrieben wird,
sondern wirklich nur wenn in Spalte F Werte geschrieben werden?
Darum funktioniert es nur mit der Zusatzabfrage:
Code: Alles auswählen
If Target.Cells.CountLarge > 1 Then Exit Sub

So sollte es ohne Fehlermeldung und nur bei einer Änderung in der Spalte F funktionieren.
Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("F1:F" & Cells(Rows.CountLarge, "F").End(xlUp).Row), Target) Is Nothing Then
        If Target.Cells.CountLarge > 1 Then Exit Sub
        Application.EnableEvents = False
        Cells(Target.Row, 3).Value = Date   'Mit einer festen Spaltenangabe
        Application.EnableEvents = True
    End If
End Sub
Mit freundlichen Grüssen
Karl


BS: Windows 10_64-Bit, MS Office Professional Plus 2016_32-Bit, incl. Microsoft Visual Basic for Applications 7.1
Benutzeravatar
hddiesel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4246
Registriert: 17. Feb 2006, 11:40
Wohnort: Deutschland

Re: VBA Laufzeitfehler 1004

Beitragvon Kuwe » 28. Sep 2021, 20:57

Hallo Karl,

Exit Sub hat in einem Ereignismakro nichts verloren.

Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 6 Then
    Cells(Target.Row, 3).Value = Date   'Mit einer festen Spaltenangabe
  End If
End Sub
Gruß Uwe
Benutzeravatar
Kuwe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6644
Registriert: 30. Dez 2003, 18:37

Re: VBA Laufzeitfehler 1004

Beitragvon hddiesel » 28. Sep 2021, 23:28

Hallo Uwe,

es geht auch ohne Exit Sub.
Code: Alles auswählen
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Column = 6 Then
        If Target.CountLarge = 1 Then _
            Cells(Target.Row, 3).Value = Date   'Datum mit einer festen Spaltenangabe
    End If
    Application.EnableEvents = True
End Sub

Aber ohne die Zeile
Code: Alles auswählen
If Target.CountLarge = 1 Then

wird ein Datum geschrieben, wenn in die Spalte F Daten kopiert werden.

Wenn ich das richtig Verstanden habe, möchte das Chris nicht, sondern nur wenn in der Spalte F ein Wert geändert wird.
Code: Alles auswählen
Application.EnableEvents = False

verhindert nur eine neue Prüfung, falls ein Datum eingetragen wird.
Mit freundlichen Grüssen
Karl


BS: Windows 10_64-Bit, MS Office Professional Plus 2016_32-Bit, incl. Microsoft Visual Basic for Applications 7.1
Benutzeravatar
hddiesel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4246
Registriert: 17. Feb 2006, 11:40
Wohnort: Deutschland


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], paul1206 und 42 Gäste