AW: hoffentlich letzte Version
13.07.2016 22:09:04
Niclaus
Grüezi Andreas
Du musst die beiden Worksheet_Change-Ereignisse in eines verpacken, indem Du im Makro die Bereiche definierst. Im Makro musst Du sie bei Set Bereich1 / Bereich2 genau definieren
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo finis ' sehr un-optimal!!
Dim Bereich1 As Range, Bereich2 As Range
Set Bereich1 = Range("i6:i500")
Set Bereich2 = Range("b6:b500")
If Not Intersect(Target, Bereich1) Is Nothing Then
datV = Range("K1")
datF = "#NV"
If Not IsDate(datV) Then
MsgBox "K1 ist kein Datumswert!"
Exit Sub
End If
If Target.Count > 1 Then Exit Sub
Target.NumberFormat = "General"
If Not Target Is Nothing Then
If IsNumeric(Target) Then
If Target = CInt(Target) Then
Application.EnableEvents = False
datN = DateSerial(Year(datV), Month(datV), Target)
If Month(datN) Month(datV) Then datN = datF
Target = datN
Else: Target = datF
End If
Else: Target = datF
End If
End If
End If
If Not Intersect(Target, Bereich2) Is Nothing Then
If Target.Value = "v" Then Target.Value = "hallo"
End If
finis:
Application.EnableEvents = True
End Sub
Den Makro-Teil für die Spalte B habe ich am Ende des Makros nur angedeutet, da musst Du Dein Makro "automatische Dezimalstellen in Spalte B und C" einfügen. Das sollte kein Problem sein.
@Werner
Meine Fehler-Behandlung ist katastrophal! Ich benutze das oben aufgeführte Makro. Wenn ich nun in Spalte i während einer Excel-Session zweimal einen "falschen" Wert eingebe, wird mein Excel 2010 heruntergefahren (ohne erkenntnisbringenden Hinweis). Wenn ich den falschen Wert während einer Session nur einmal eingebe, wird kein Fehler produziert. - Seltsam! Zählt Excel irgendwo die Anzahl Fehler? - In der Version des Makros von heute Nachmittag ist dieser Fehler nicht aufgetreten.
Viele Grüsse Niclaus