AW: Makro auslösen durch Zellinhalt
06.07.2006 00:03:36
fcs
Hi Peter,
leere Zellen werden mit "Isempty(Zelle)" überprüft. Ich hab auch die Überprüfung auf Zahleneingabe eingebaut, damit versehentliche Eingabe von Text keinen Makroabbruch erzeugt.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If IsNumeric(Target) Then
If Target.Value > 0 And Target.Address = "$E$22" Then Call Drehfeld11neu
If Target.Value > 0 And Target.Address = "$E$28" Then Call Drehfeld125neu
If (Target.Address = "$E$22" Or Target.Address = "$E$28") _
And Range("$E$22").Value > 0 And Range("$E$28").Value > 0 Then Call Drehfeld126neu
If (Target.Address = "$E$22" Or Target.Address = "$E$28") _
And IsEmpty(Range("$E$22")) And Range("$E$28").Value > 0 Then Call Drehfeld125neu
If (Target.Address = "$E$22" Or Target.Address = "$E$28") _
And Range("$E$22").Value > 0 And IsEmpty(Range("$E$28")) Then Call Drehfeld11neu
If (Target.Address = "$E$22" Or Target.Address = "$E$28") _
And IsEmpty(Range("$E$22")) And IsEmpty(Range("$E$28")) Then Call Drehfeld126neu
Else
MsgBox ("Nur Zahleneingaben sind zulässig!")
Target.Select
End If
End Sub
Allerding wird jetzt wenn beide Zellen E22 und E28 leer sind
Makro Drehfeld11neu zwei mal ausgeführt wenn in E22 ein Wert>0 eingegeben wird
Makro Drehfeld125neu zwei mal ausgeführt wenn in E28 ein Wert>0 eingegeben wird
Falls das ok ist brauchst du nichts ändern. Wenn die Makros in diesen Fällen nur einmal ausgeführt werden sollen, dann passe wie folgt an. Ich hab hier mit Select Case gearbeitet weil dann die Bedingungen etwas übersichtlicher dargestellt werden können:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If IsNumeric(Target) Then
Select Case Target.Address
Case "$E$22"
If Target.Value > 0 Or _
(Range("$E$22").Value > 0 And IsEmpty(Range("$E$28"))) Then Call Drehfeld11neu
If IsEmpty(Range("$E$22")) And Range("$E$28").Value > 0 Then Call Drehfeld125neu
If (Range("$E$22").Value > 0 And Range("$E$28").Value > 0) Or _
(IsEmpty(Range("$E$22")) And IsEmpty(Range("$E$28"))) Then Call Drehfeld126neu
Case "$E$28"
If Target.Value > 0 Or _
(IsEmpty(Range("$E$22")) And Range("$E$28").Value > 0) Then Call Drehfeld125neu
If Range("$E$22").Value > 0 And IsEmpty(Range("$E$28")) Then Call Drehfeld11neu
If Range("$E$22").Value > 0 And Range("$E$28").Value > 0 Or _
(IsEmpty(Range("$E$22")) And IsEmpty(Range("$E$28"))) Then Call Drehfeld126neu
Case Else
'do nothing
End Select
Else
MsgBox ("Nur Zahleneingaben sind zulässig!")
Target.Select
End If
End Sub
gruss Franz