Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Autoform als Ampel (VBA Code optimieren)
#1
Hallo,

ich möchte für ein Projekt gerne Autoformen als Ampel und Schaltfläche nutzen.

Ich habe das auch alles soweit hinbekommen, allerdings reagiert die Farbumschaltung nur, wenn ich in der entsprechenden Zelle die Zahl manuell eingebe. Was müßte ich ändern, das die Umschaltung auch auf eine Änderung der Zelle durch Berechnung funktioniert?

Hier der Code:

Code:
Option Explicit



Private Sub Worksheet_Change(ByVal Target As Range)
   If Target = Range("A21") Then    'Wert steht in A1
       ActiveSheet.Shapes("Rechteck 4").Select    'Rechteck 4 ist der Name der Freihandform
       With Selection
           .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Target.Value)
       End With
       Target.Select
   End If
' Hier für eine weitere Form
   If Target = Range("A22") Then    'Wert steht in A2
       ActiveSheet.Shapes("Rechteck 5").Select    'Freeform 2 ist der Name der Freihandform
       With Selection
           .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Target.Value)
       End With
       Target.Select
   End If
   If Target = Range("A23") Then    'Wert steht in A2
       ActiveSheet.Shapes("Rechteck 6").Select    'Freeform 2 ist der Name der Freihandform
       With Selection
           .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Target.Value)
       End With
       Target.Select
   End If
End Sub

Private Function fctFarbe(dblWert As Double) As Byte
   Select Case dblWert
   Case Is >= 5        'Werte und Relationen anpassen
       fctFarbe = 10   'Farbwerte entsprechend ändern
   Case Is >= 4
       fctFarbe = 11
   Case Is >= 2
       fctFarbe = 5
   Case Else
       fctFarbe = 9
   End Select
End Function
Grüße Mario  Angel
Antworten Top
#2
Hallo

Vielleicht Worksheet_Calculate() statt Worksheet_Change()?
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#3
Moin!
Nur schon mal vorsorglich:
Das _Calculate() hat keine Übergabeparameter.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#4
Hallo, ich habe diesen Code im Netz gefunden, und an meine datei angepasst.

Das habe ich schon probiert. Aber dann kommt es zu einem Fehler(Variable nicht definiert)

Oder gibt es evtl sogar eine einfachere Möglichkeit das Umzusetzen?

Ich benötige Momentan 3 Varianten, um den Code so nutzen zu können dachte ich an die Formellösung in der Tabelle.

1. Variante:   Datum > Heute = grün, Datum < Heute = Rot
2. Variante:  zusätzlich Datum < Heute +5 = Gelb
3. Variante:  Datum < Heute +20 = Gelb
Grüße Mario  Angel
Antworten Top
#5
(05.07.2017, 10:57)RPP63 schrieb: Nur schon mal vorsorglich:
Das _Calculate() hat keine Übergabeparameter.
M.Wichmann schrieb:Das habe ich schon probiert. Aber dann kommt es zu einem Fehler(Variable nicht definiert)
Ich erkenne aber an, dass Du kurz nach meinem Beitrag gepostet hast.
Wahrscheinlich hast Du ihn noch nicht gelesen.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#6
Hallo Ralf, ja das hatte ich erst später gesehn. 
Aber probiert hatte ich es schon bevor ich diesen Beitrag hier eröffnet habe.

Ich probiere bei Problemen immer erst mir selbst zu helfen, aber komme trotz Google nicht wirklich weiter.
Grüße Mario  Angel
Antworten Top
#7
Hallo Mario,

ist ungetestet

Code:
Private Sub Worksheet_Calculate()
  
    If Cells(1, 1) = Range("A21") Then   'Wert steht in A1
'        ActiveSheet.Shapes("Rechteck 4").Select    'Rechteck 4 ist der Name der Freihandform
        With ActiveSheet.Shapes("Rechteck 4")
            .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Target.Value)
        End With
    End If
' Hier für eine weitere Form
    If Cells(2, 1) = Range("A22") Then   'Wert steht in A2
'        ActiveSheet.Shapes("Rechteck 5").Select    'Freeform 2 ist der Name der Freihandform
        With ActiveSheet.Shapes("Rechteck 5")
            .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Target.Value)
        End With
    End If
    If Cells(2, 1) = Range("A23") Then   'Wert steht in A2
'        ActiveSheet.Shapes("Rechteck 6").Select    'Freeform 2 ist der Name der Freihandform
        With ActiveSheet.Shapes("Rechteck 6")
            .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Target.Value)
        End With
    End If
    
End Sub
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#8
Hallo Stefan,


leider klappt das nicht, auch der Fehler, variable nicht definiert.
Grüße Mario  Angel
Antworten Top
#9
Hallo,

Code:
Private Sub Worksheet_Calculate()
  
    If Cells(1, 1) = Range("A21") Then   'Wert steht in A1
'        ActiveSheet.Shapes("Rechteck 4").Select    'Rechteck 4 ist der Name der Freihandform
        With ActiveSheet.Shapes("Rechteck 4")
            .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Cells(1, 1).Value)
        End With
    End If
' Hier für eine weitere Form
    If Cells(2, 1) = Range("A22") Then   'Wert steht in A2
'        ActiveSheet.Shapes("Rechteck 5").Select    'Freeform 2 ist der Name der Freihandform
        With ActiveSheet.Shapes("Rechteck 5")
            .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Cells(2, 1).Value)
        End With
    End If
    If Cells(2, 1) = Range("A23") Then   'Wert steht in A2
'        ActiveSheet.Shapes("Rechteck 6").Select    'Freeform 2 ist der Name der Freihandform
        With ActiveSheet.Shapes("Rechteck 6")
            .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Cells(2, 1).Value)
        End With
    End If
    
End Sub
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#10
Ja, da steht ja auch noch Target drin!
Ebenfalls ungetestet (heißt, Du könntest mal etwas zum Testen hochladen!):
Private Sub Worksheet_Calculate()
    Me.Shapes("Rechteck 4").Select    'Rechteck 4 ist der Name der Freihandform 
    With Selection
        .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Me.Range("A21"))
    End With
    ' Hier für eine weitere Form 
    ActiveSheet.Shapes("Rechteck 5").Select    'Freeform 2 ist der Name der Freihandform 
    With Selection
        .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Me.Range("A22"))
    End With
    ActiveSheet.Shapes("Rechteck 6").Select    'Freeform 2 ist der Name der Freihandform 
    With Selection
        .ShapeRange.Fill.ForeColor.SchemeColor = fctFarbe(Me.Range("A23"))
    End With
End Sub

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste