Hallo Wolfgang,
so eine Lösung ist mir auch vorgeschwebt, du warst nur schneller mit dem
Posten ;-)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'01-2006
'E.Bimczok
Dim myRange As String
myRange = "A1:E1"
If Intersect(Range(myRange), Target) Is Nothing Then
Dim testValue As Double
testValue = Application.WorksheetFunction.Sum(Range(myRange))
testValue = Round(testValue, 1)
If testValue <> 1# Then
dummy = MsgBox("Die Summe " & myRange & _
" muss 100% ergeben!" & vbCr & _
"Momentane Summe: " & _
Format(testValue, "0%"), _
vbCritical)
End If
End If
End Sub
Ich habe lange an dem Problem gehangen, dass es offensichtlich
Rundungsfehler gibt (abhängig von den ausgewählten Werten), so dass zwar
beim Debuggen als Ergebnis der Summe im Lokalfenster "1" angezeigt wird,
aber intern der Wert leicht abweicht (vermutlich in der 10ten
Nachkommastelle oder so). Bei dem Vergleich "If testValue <> 1# Then"
habe ich mich schon ein wenig gewundert, dass ich immer in die Bedingung
reinkomme... Also immer schön runden!
Ich habe übrigens das SelectionChange-Ereignis verwendet. Das hat zwar
von der Perfomance theoretisch Nachteile, da es ja häufiger vorkommt als
das Worksheet_Change-Ereignis. Aber falls man A1 ändert und mit Tab in
B1 springt, dann wird der Wert aufgrund der Intersect-Abfrage nicht
überprüft. Der User könnte dann die Tabelle mit dem fehlerhaften Werten
abspeichern, ohne das der Hinweis kommt. Das kann zwar so auch
passieren, aber die Wahrscheinlichkeit ist deutlich geringer.
Gruß
Eike
p.s. Warum verwendest du Range(Target.Address) anstelle von Target??
Post by Wolfgang HabernollHallo Uwe
A1-E1 sind in % formatiert ? dann geht das
ohne VBA und ohne Box aber Meldung in F1 dann in F1 folgende Formel
=WENN(SUMME(A1:E1)<100%;"Unter 100%";WENN(SUMME(A1:E1)>100%;"Über 100%";"Genau
100%"))
oder mit VBA und Box dies Makro im VBE ins entsprechende Tabellenblatt
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.Intersect(Range(Target.Address), Range("A1:E1")) Is Nothing
Then Exit Sub
Dim dblSum As Double
dblSum = Application.WorksheetFunction.Sum(Range("A1:E1"))
Select Case dblSum
Case Is > 1
MsgBox ("A C H T U N G Über 100%")
Case Is < 1
MsgBox ("A C H T U N G Unter 100%")
End Select
End Sub
mfG
Wolfgang Habernoll
Post by uwedjHallo Experten .......
habe 5 eingabefelder nebeneinander die in der summe immer 100% ergeben
müssen , nicht mehr und nicht
weniger um daran gekoppelte mengen anteilig zu ermitteln ......
also
A1= 50%
B1= 25%
C1= 0%
D1= 5%
E1= 15%
werden werte eingegeben die kein 100% ergeben in irgendeinem feld,dann
sollte eine box aufgehen und warnen......
geht das ???
vielen dank
gruss
uwe schröder