Am Mon, 8 Jul 2013 10:26:53 +0200
Post by Claus Buscheigentlich bräuchtest du nur zu prüfen, ob E4 das Minimum und G4 das
=E4=MIN(E4:G4) und =G4=MAX(E4:G4)
Uff!
Daran hab ich gleich *gar nicht* gedacht...
Hab mir jetzt ein VBA gebastelt, dass so aussieht:
----
Function CheckPricing() As Boolean
Dim c As Range, dp As Range
Dim lastrow As Long
CheckPricing = True
With Worksheets("Produktliste")
lastrow = .Range("I" & Rows.Count).End(xlUp).Row
Set dp = .Range("I4:I" & lastrow)
End With
For Each c In dp
If c.Value > c.Offset(0, 1).Value Or c.Value > c.Offset(0,
2).Value _ Or c.Offset(0, 1).Value > c.Offset(0, 2).Value _
Then
CheckPricing = False
c.Interior.Color = vbRed
c.Offset(0, 1).Interior.Color = vbRed
c.Offset(0, 2).Interior.Color = vbRed
Else
c.Interior.Color = xlNone
c.Offset(0, 1).Interior.Color = xlNone
c.Offset(0, 2).Interior.Color = xlNone
End If
Next
End Function
----
Dieses rufe ich im Workbook_BeforeSave Event auf (da wird auch noch was
anderes geprüft) und wenn da was nicht passt, werden die Zellen
eingefärbt und der Speichervorgang abgebrochen.
Ursprünglich hatte ich vorgehabt, sogar nur jeweils die Zellen einer
zeile einzufärben, mit denen was nicht stimmt, also z.B.
E4=1000
F4=890
G4=1500
Dann würden E4 und F4 eingefärbt, weil hier evtl. ein "Dreher" vorliegt.
Bei
E4=890
F4=1500
G4=1000
würden dann analog dazu F4 und G4 eingefärbt und bei
Das aber würde das VBA eher aufwändiger machen - oder?
(Spontan fällt mir dazu jetzt nur ein, das mittels
SELECT... CASE...END CASE
zu machen.
Volker
der weiss, dass die Prozedur zu komplziert gestrickt ist...