AW: Schleifen
07.05.2015 18:33:06
Klaus
Hallo Karman,
was hat das mit Schleifen zu tuen?
Der Code funktioniert nur in Tabelle1, weil er in Tabelle1 steht ... Der Turbolader in meinem SAAB funktioniert ja auch nicht in meinem Toyota :-)
Was macht das einsame "Next" mitten im Code?
Du prüfst zuerst Spalte B. Falls da nichts zutrifft, verlässt du mit "Exit Sub" den Code. Ergo: Der zweite Teil des Code hat keine Chance, jemals ausgeführt zu werden. Packe das ganze stattdessen in IF-Blöcke. Stupide ginge das so:
Private Sub Worksheet_Change(ByVal Target As Range)
'If Intersect(Target, Range("B1:B100")) Is Nothing Then Exit Sub
If Not Intersect(Target, Range("B1:B100")) Is Nothing Then
If Target.Value "" Then
Target.Offset(0, 2).Value = Date
Else
Target.Offset(0, 2).ClearContents
End If
End If
'If Intersect(Target, Range("e1:e100")) Is Nothing Then Exit Sub
If Not Intersect(Target, Range("E1:E100")) Is Nothing Then
If Target.Value "" Then
Target.Offset(0, 2).Value = Date
Else
Target.Offset(0, 2).ClearContents
End If
End If
End Sub
Aber dann musst du den Code ständig wiederholen - wenn du ihn dann auf 3, 5 oder 70 Spalten erweiterst pflegst du dir einen Wolf, sobald sich etwas ändert. Besser (nur einer von vielen Ansätzen): Lege einen boolean-Schalter um, der dann den Code ausführt oder nicht. Ungetestet:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MacheDatum As Boolean
MacheDatum = False
If Not Intersect(Target, Range("B1:B100")) Is Nothing Then MacheDatum = True
If Not Intersect(Target, Range("E1:E100")) Is Nothing Then MacheDatum = True
If MacheDatum Then
If Target.Value "" Then
Target.Offset(0, 2).Value = Date
Else
Target.Offset(0, 2).ClearContents
End If
End If
End Sub
Wieder die stupide Lösung: Kopiere diesen Code in jedes Blatt, in dem der Code wirken soll.
Grüße,
Klaus M.vdT.