Excel VBA if zelle gefüllt then?
Ich hätte eine Frage bzgl. VBA. Ich habe eine Tabelle und möchte, dass wenn ich in der Spalte B etwas eintrage die anderen Zeilen in der eingetragenen Zeile einen Wert erhalten. Ich finde nur keine Funktion, wie ich am besten definieren kann, wenn eine Zelle aus Spalte B bearbeitet wird. Aktuell habe ich folgendes verwendet:
If Not Application.Intersect(Target, Range("C8:C10000")) Is Nothing Then
Aber das ist fehlerhaft, da wenn ich etwas lösche ein Widerspruch entsteht. Ich hoffe ihr könnt mir helfen
LG
1 Antwort
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.
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
Ich danke dir vielmals, du hast mich wirklich vor dem kollaps gerettet.
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.