Excel VBA if zelle gefüllt then?

1 Antwort

Von Experte Suboptimierer bestätigt

Spalte B etwas eintrage die anderen Zeilen in der eingetragenen Zeile einen Wert erhalten. 

Ich bastel mal was und Du kannst dann testen, ob es Deiner Aufgabenstellung nahe kommt:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B8:B1000")) Is Nothing Then
  Target.Offset(0, 1).Value = "X"
  Target.Offset(0, 2).Value = "Y"
  Target.Offset(0, 3).Value = "Z"
End If
End Sub

DAS wäre so ein Grundgerüst. Vielleicht kannst Du es selber anpassen? Sonst frag nochmal nach.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

kinmin 
Beitragsersteller
 10.11.2021, 21:36

Also ich war bisher so weit:

Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Range("C8:C10000")) Is Nothing Then

 ActiveCell.Offset(-1, -2).Value = Date

 ActiveCell.Offset(-1, -1).Value = ActiveCell.Offset(-2, -1).Value

 'ActiveCell.Offset(0, 1).Value = 0

Range(ActiveCell.Offset(-1, 1), ActiveCell.Offset(-1, 6)).Value = 0

Range(ActiveCell.Offset(-1, 8), ActiveCell.Offset(-1, 18)).Value = 0

End If

End Sub

Das Problem ist, wenn ich diese Zellen manuell bearbeite und alles lösche bekomme ich folgende Warnung:

Laufzeitfehler '1004'

Anwendungs- oder objektdefinierter Fehler.

Ich denke weil dieser Befehl application.intersect überprüft ob eine änderung vorgenommen wird und wenn ich etwas lösche, will der ja gleichzeitig etwas hinzufügen, das ist zumindest meine vermutung.

0
Oubyi, UserMod Light  10.11.2021, 22:03
@kinmin

Stimmt. Ist unschön. Ich habe mal die ActiveCell durch Target ersetzt, ist zwar wohl nicht der Bug, aber passt imho besser.
Dann habe ich die Events ausgeschaltet, sodass zwischendurch nicht upgedatet wird. Ich denke da lag das Problem. Zumindest kann ich den Fehler dann nicht mehr auslösen. DU?

Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C8:C10000")) Is Nothing Then
  On Error GoTo ErrorHandler
  Application.EnableEvents = False
     Target.Offset(-1, -2).Value = Date
     Target.Offset(-1, -1).Value = Target.Offset(-2, -1).Value
     'target.Offset(0, 1).Value = 0
    Range(Target.Offset(-1, 1), Target.Offset(-1, 6)).Value = 0
    Range(Target.Offset(-1, 8), Target.Offset(-1, 18)).Value = 0
ErrorHandler: Application.EnableEvents = True
End If
End Sub
1