Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bedingte Formatierung einer Form

Bedingte Formatierung einer Form
22.05.2023 11:58:34
Frank

Hallo allerseits,
möchte eine Form mittels bedingter Formatierung farblich ändern. Dies geht aber nicht bzw. muss über VBA gelöst werden. Dazu habe ich hier in der Recherche folgendes gefunden:

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("D3") = 0 Then
ActiveSheet.Shapes.Range(Array("Oval 2")).Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Solid
End With
Range("D3").Select
ElseIf Range("D3") = 1 Then
ActiveSheet.Shapes.Range(Array("Oval 2")).Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(146, 208, 80)
.Transparency = 0
.Solid
End With
Range("D3").Select
End If
End Sub

und die Kurzform:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("D3") = 1 Then
Shapes("Oval 1").Fill.ForeColor.RGB = RGB(255, 0, 0)
ElseIf Range("D3") = 0 Then
Shapes("Oval 1").Fill.ForeColor.RGB = RGB(0, 255, 0)
End If
End Sub

Hierbei handelt es sich aber um einen Kreis. Ich benötige aber folgendes:
WENN(M4 größer L4/24
dann sollen die Linien schwarz werden.
WENN(M4 kleiner L4/24
dann sollen die Linien Rot werden. Habe dazu mal den Makrorekorder laufen lassen um überhaupt mal zu sehen, was da so passiert. Form ist schwarz und wird in Rot gefärbt.
Sub Makro1()
'
' Makro1 Makro
    ActiveSheet.Shapes.Range(Array("Rounded Rectangle 7")).Select
    With Selection.ShapeRange.Line
      .Visible = msoTrue
      .ForeColor.RGB = RGB(255, 0, 0)
      .Transparency = 0.0899999738
    End With
End Sub

Hat da jemand ne Idee/Lösung parat?

Gruß Frank

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bedingte Formatierung einer Form
22.05.2023 12:32:12
Oberschlumpf
Hi Frank,

versuch es hiermit

Sub Makro1()
'
' Makro1 Makro
    
    ActiveSheet.Shapes.Range(Array("Rounded Rectangle 7")).Select

    With Selection.ShapeRange.Line
      .Visible = msoTrue
            If Range("M4").Value  Range("L4").Value / 24 Then
                    .ForeColor.RGB = RGB(255, 0, 0)
                Else
                    .ForeColor.RGB = RGB(0, 0, 0)
            End If
    End With
    
End Sub
Bei mir wird Randfarbe in rot geändert, wenn M4 kleiner als L4/24, wenn M4 größer, dann Randfarbe = schwarz.

Bei dir auch?

Ciao
Thorsten


Anzeige
AW: Bedingte Formatierung einer Form
22.05.2023 13:10:12
GerdL
Moin,
lieber Sekt als Select. :-)

Sub Unit()

With ActiveSheet.Shapes("Rounded Rectangle 7")
.Line.Visible = msoTrue
.Line.Weight = xlThick
.Line.ForeColor.RGB = IIf(.Parent.Range("M4").Value  _
                          .Parent.Range("L4").Value / 24, RGB(255, 0, 0), RGB(0, 0, 0))
End With

End Sub

Gruß Gerd


AW: Bedingte Formatierung einer Form
22.05.2023 15:31:04
Daniel
Hi
je nachdem wie die Form aussehen soll, gibts eventuell einen VBA-freien Workaround für die Nutzung der bedingten Formatierung.

für alles, was eine Rechteckähnliche Form hat, sollte folgendes funktioneren:

1. erstelle eine Zelle, die über die Bedingte Formatierung entsprechen eingefärbt wird.
2. kopiere diese Zelle und füge sie als verknüpfte Grafik ein (Inhalte Einfügen, Icon unten rechts)
3. die größe des Elements kannst du ändern, ebenso gewisse Formänderung über die Tools im Menü Bildtools - Format (das erscheint, wenn du die Form anklickst)
einfache Veränderungen wie abgerundete Ecken oder auch ein Oval/Kreis sind damit möglich.
Angezeigter Text muss aus der Zelle übernommen werden, allternativ kann er aber auch mit einer zweiten Form (die dann ohne Hintergrund und Rahmen) darüber gelegt werden.

Gruß Daniel


Anzeige
AW: Bedingte Formatierung einer Form
23.05.2023 16:57:46
Frank
Hallo allerseits,
sowohl Thorsten´s als auch Gerd´s Lösungen funktionieren, wobei die von Gerd doch die elegantere ist.
@Gerd ist es richtig, dass die Form die Farbe nicht automatisch ändert? Funktioniert, wenn ich drauf klicke. Habe den Code sowohl in ein Modul, als auch in Tabelle 2 rein kopiert. Kann sein, dass ich was übersehe. Komme grad von ner 10,5 Stunden Schicht.

@Daniel deine Lösung habe ich jetzt nicht ausprobiert. Die erscheint mir zu schwierig/aufwendig zu sein.

Gruß Frank


AW: Bedingte Formatierung einer Form
23.05.2023 17:31:27
GerdL
Hallo Frank,

mein Code funktioniert nur nach "Makro zuweisen" bei Klick auf die Form.

Für eine Automatik bei Änderungen in den beiden Zellen L4:M4 ist ein Ereigniscode im Tabellenblattmodul erforderlich.
Steht das aufzurufende Makro im Modul einer Tabelle, setze bitte deren Codenamen davor, z.B. Call Tabelle2.Unit
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("L4:M4")) Is Nothing Then
        Application.EnableEvents = False
        Call Unit
        Application.EnableEvents = True
    End If

End Sub
Gruß Gerd


Anzeige
AW: Bedingte Formatierung einer Form
26.05.2023 14:37:01
Frank
Hallo Gerd,
bin jetzt erst dazu gekommen, deine Lösung zu testen. Leider ohne Erfolg. Egal in welcher Konstellation, automatisch passiert da gar nichts. Deine erste Lösung mit dem Anklicken, die läuft.
Hab die Datei noch mal angehangen https://www.herber.de/bbs/user/159338.xlsm Vielleicht findest du ja den Fehler. Ich hab alle Möglichkeiten durch probiert.
Gruß Frank


AW: Bedingte Formatierung einer Form
27.05.2023 11:11:13
Frank
Guten Morgen allerseits,
versuche seit gestern Abend verzweifelt, die Lösung von Gerd zum Laufen zu bringen. Leider vergeblich. Habe es der Einfachheit halber mal neu aufgesetzt, weil ich dachte, irgendwas könnte sich wohl beissen. Dem ist wohl leider nicht so. Ich habe alle Varianten(die mir jetzt eingefallen sind) ausprobiert, aber leider ohne Erfolg. Ich habe die Vermutung, dass das Makro aus der Prozedur gar nicht angestoßen wird, weil es - wenn ich es manuell starte kurioserweise funktioniert.
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
   If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
      Application.EnableEvents = False
      Call Tabelle1.Unit
'         With ActiveSheet.Shapes("Rounded Rectangle 1")
'                         .Line.Visible = msoTrue
'                         .Line.Weight = xlThin
'                         .Line.ForeColor.RGB = IIf(.Parent.Range("B1").Value  _
'                                                   .Parent.Range("A1").Value / 24, RGB(255, 0, 0), RGB(0, 0, 0))
'         End With
      Application.EnableEvents = True
   End If
 
End Sub
 
Sub Unit()

With ActiveSheet.Shapes("Rounded Rectangle 1")
                .Line.Visible = msoTrue
                .Line.Weight = xlThin
                .Line.ForeColor.RGB = IIf(.Parent.Range("B1").Value  _
                                          .Parent.Range("A1").Value / 24, RGB(255, 0, 0), RGB(0, 0, 0))
End With


End Sub
Hier mal die Demo-Mappe: https://www.herber.de/bbs/user/159347.xlsm

Weis jemand, wo der Haken an der Sache ist? Normal gehe ich davon aus, das Gerd keine Lösung postet, die nicht funktioniert.

Gruß Frank


Anzeige
AW: Bedingte Formatierung einer Form
28.05.2023 12:25:37
GerdL
Moin Frank,

nimm das Worksheet_Change, nicht das Worksheet_SelectionChange.

Lösche das mit dem Makro namensgleiche allgemeine Modul Unit, wenn das Makro Unit im Tabellenblattmodul steht.

Falls die Events abhanden kommen, kannst du sie bspw. so wieder aktivieren.
Sub a()
Application.EnableEvents = True
End Sub
Gruß Gerd


AW: Bedingte Formatierung einer Form
28.05.2023 17:42:44
Frank
Hallo Gerd,
danke für den Hinweis. Ist mir gar nicht aufgefallen. Habe ich gestern beim Experimentieren das Falsche gelöscht. Jetzt ist mir auch klar, warum es plötzlich nur noch eingeschränkt funktioniert hat. Bei dem was du zuletzt geschrieben hast, kann ich dir nicht ganz folgen. Mittlerweile habe ich wieder was Neues raus gefunden. In der Demo-Mappe(also die Letzte) funktioniert es tadellos, weil ich direkt in B1 den Wert ändere. In der vorletzten Mappe ist es aber so, dass sich die Werte durch Eingabe von Zahlen in anderen Zellen ändern und deshalb funktioniert es nicht automatisch. Klicke ich mit der Maus rein, dann ändert sich auch die jeweilige Farbe. Das ist jetzt der aktuelle Code aus der letzten Mappe.
Private Sub Worksheet_Change(ByVal Target As Range)
 
   If Not Intersect(Target, Range("A1:B1")) Is Nothing Then
      Application.EnableEvents = False
'      Call Tabelle1.Unit
         With ActiveSheet.Shapes("Rounded Rectangle 1")
                         .Line.Visible = msoTrue
                         .Line.Weight = xlThin
                         .Line.ForeColor.RGB = IIf(.Parent.Range("B1").Value  _
                                                   .Parent.Range("A1").Value / 24, RGB(255, 0, 0), RGB(0, 0, 0))
         End With
      Application.EnableEvents = True
   End If
 
End Sub
Es funktioniert. Wie ich das aber in der anderen Datei beheben kann, dass es auch dort automatisch funktioniert, ist mir im Moment noch schleierhaft.

Gruß Frank


Anzeige
AW: Bedingte Formatierung einer Form
28.05.2023 18:03:03
GerdL
Hallo Frank,

beim Ausprobieren im Code kann es passieren, dass die Ereignisse auf False gestellt, also abgestellt werden.
Dann "feuern" die Ereignisprozeduren wie Worsheet_Change nicht.

Das Einfachste wäre bei dir jetzt vermutlich, das Target im Worksheet_Change auf die Eingabezellen zu ändern.

Gruß Gerd


AW: Bedingte Formatierung einer Form
28.05.2023 18:31:20
Frank
Meinst du das so?
 If Not Intersect(Target, Range("J10:K375")) Is Nothing Then
J steht für Dienstbeginn, K für Dienstende. Oder so?
 If Not Intersect(Target, Range("M10:M375")) Is Nothing Then
in M stehen die errechneten Stunden, die dann in M4 über

=TEILERGEBNIS(109;M10:M375)
zusammengezählt werden. Und in N4 stehen dann die Minusstunden bzw. die Überstunden. Aber ich glaube nicht, dass des Rätsels Lösung so einfach ist. Wenn ich sehe, was ihr Profis hier in VBA so alles programmiert, ist es mir unbegreiflich, dass so eine kleine, doofe Form solche Schwierigkeiten macht.

Gruß Frank


Anzeige
AW: Bedingte Formatierung einer Form
28.05.2023 18:45:53
GerdL
Hallo Frank,

ich denke die erste von deinen beiden Codezeilen könnte es richten.

Gruß Gerd


AW: Bedingte Formatierung einer Form
28.05.2023 19:04:29
Frank
Ne, bringt auch nichts. Irgendetwas blockiert den Aufruf bzw. das Ausführen des Makros. Wenn ich das Makro manuell starte, dann funktioniert es. Ich glaube, ich gebs auf und mache einfach nen Rahmen drum und erstelle eine bedingte Formatierung. Das macht keinen Spass mehr.

Gruß Frank

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige