Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Labels (bedingt) formatieren?

Forumthread: Labels (bedingt) formatieren?

Labels (bedingt) formatieren?
22.07.2002 19:04:30
Gerhard S.
Hallo,
mein Problem ist folgendes, in meiner Userform werden in 4 Textboxen Werte (Punkte) eingegeben, die zum Tabellenblatt in 4 zellen kommen. Von dort wird berechnet, wie hoch der Betrag ist und kommt dann wieder zurück in 4 Labels der Userform. Nun möchte ich gerne, das mir die Labels schon "von weitem" anzeigen ob dieser Betrag positiv oder negativ, also unter 0,00€ liegt.

In der Recherche hab ich sowas ähnliches aufgestöbert, komm aber als Nichtprofi nicht damit zurecht. In dem Code wird der Hintergrund verändert, mir würde es aber schon langen, wenn nur die Schrift Rot+Fett wird bei negativen Beträgen.
Hier der Code:
For i = 0 To Me.Controls.Count - 4 '???
If Left(Me.Controls(i).Name, 5) = "Label" Then Me.Controls(i).BackColor = &H8000000D
Next
End Sub

Vielen Dank im vorraus

mfg

Gerhard S.

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Labels (bedingt) formatieren?
22.07.2002 20:06:53
L.Vira
Wozu die Schleife? Werden alle 4 Werte gleichzeitig negativ?
Bei welchem Ereignis sollen die Label z.B. rot werden?
Re: Labels (bedingt) formatieren?
22.07.2002 20:47:15
Nepumuk
Hallo Gerhard

mein Vorschlag

Dim index
For index = 1 To 4
If Left(CStr(UserForm1.Controls("Label" & CStr(index))), 1) = "-" Then
UserForm1.Controls("Label" & CStr(index)).ForeColor = RGB(255, 0, 0)
Else
UserForm1.Controls("Label" & CStr(index)).ForeColor = RGB(0, 0, 0)
End If
Next

Gruß
Nepumuk

Anzeige
Re: Labels (bedingt) formatieren?
23.07.2002 08:36:45
Nepumuk
Morgen Gerhard

Ich habe mir deine Aufgabe nochmals angesehen. Du wolltest die Schrift ja auch noch fett. Das geht dann so:

Dim index
For index = 1 To 4
With UserForm1.Controls("Label" & CStr(index))
If Left(CStr(.Caption)), 1) = "-" Then
.ForeColor = RGB(255, 0, 0)
.Font.Bold = True
Else
.ForeColor = RGB(0, 0, 0)
.Font.Bold = False
End If
End With
Next

Anzeige
Danke....aber
23.07.2002 17:17:43
Gerhard S.
damit komme ich leider nicht klar. Wo muss ich diesen Code denn einfügen? Ergänzen? Ändern? Meine Userform heisst UFRechnen2, die Labels sind Label15, 16, 17, 18. Kannst Du mir das detaillierter erklären?

mfg

Gerhard S.

Details
23.07.2002 18:19:39
Gerhard S.
Hallo L.Vira,
es werden mindestens ein maximal drei Werte negativ angezeigt. Wenn der Betrag unter 0,00 liegt, dann soll das Label anders aussehen. Ich bitte aber um einen detaillierten Code, meine Userform heisst UFRechnen2, meine Labels sind Label15, 16, 17 und 18.

mfg

Gerhard S.

Anzeige
Re: Danke....aber
23.07.2002 18:37:24
Nepumuk
Hallo Gerhard,
in deinem Code zur Ausgabe deiner Rechenoperation erfolgt die Wertzuweisung an deine Labels mit dem Befehl „Label15.Caption = hier kommt entweder eine Variable oder ein Direkter Zellbezug“. Nach dieser Zeile fügst du den Aufruf „Call Label_formatieren“ ein. Am Ende deiner Codesequenz kopierst du folgenden Code ein:

Den Call-Aufruf zum formatieren musst du natürlich bei den Caption-Zuweisungen der Label 16, 17 und 18 auch einfügen, dann müsste es funktionieren.

Gruß
Nepumuk

Anzeige
Problem
23.07.2002 18:52:44
Gerhard S.
Hallo Nepumuk, ich komme leider nicht weiter. In meinem Code kommt kein Caption oder Call vor. stattdessen bekomme ich bei deinem Code eine Fehlermeldung, "Erwarte Then oder GoTo" ???
In der Zeile, die Rot erscheint.

'Hier der Code der Userform

Private Sub CommandButton1_Click()
[MP!D4].Value = TextBox1.Value '<<[MP!E4].Value = TextBox2.Value
[MP!F4].Value = TextBox3.Value
[MP!G4].Value = TextBox4.Value


Label15 = Sheets("MP").Range("D5") '<<Label16 = Sheets("MP").Range("E5")
Label17 = Sheets("MP").Range("F5")
Label18 = Sheets("MP").Range("G5")

Private Sub Label_formatieren() ' der Code von Dir
Dim index
For index = 15 To 18
With UFRechnen2.Controls("Label" & CStr(index))
If Left(CStr(.Caption)), 1) = "-" Then '<<< Hier ist die Zeile Rot + Fehlermeldung
.ForeColor = RGB(255, 0, 0)
.Font.Bold = True
Else
.ForeColor = RGB(0, 0, 0)
.Font.Bold = False
End If
End With
Next index
End Sub

Ich glaube wir arbeiten an verschiedenen Userformen?

mfg

Gerhard S.

Anzeige
Re: Problem
23.07.2002 21:28:34
Nepumuk
Hallo Gerhard
nach den Befehl:

Label18 = Sheets("MP").Range("G5")

einfach diese Zeilen einfügen:

Dim index
For index = 15 To 18
With UFRechnen2.Controls("Label" & CStr(index))
If Left(CStr(.Caption)), 1) = "-" Then
.ForeColor = RGB(255, 0, 0)
.Font.Bold = True
Else
.ForeColor = RGB(0, 0, 0)
.Font.Bold = False
End If
End With
Next index

einfacher gehts nicht mehr.

Gruß
Nepumuk

Anzeige
;
Anzeige

Infobox / Tutorial

Labels bedingt formatieren in Excel UserForms


Schritt-für-Schritt-Anleitung

Um die Labels in Deiner UserForm abhängig von einem Betrag zu formatieren, kannst Du folgenden VBA-Code verwenden. Dieser Code ändert die Schriftfarbe und den Schriftstil, wenn der Betrag negativ ist.

  1. Öffne den VBA-Editor in Excel, indem Du ALT + F11 drückst.
  2. Finde Deine UserForm, in der Du die Labels hast (z.B. UFRechnen2).
  3. Füge den folgenden Code in das Modul der UserForm ein:
Private Sub CommandButton1_Click()
    [MP!D4].Value = TextBox1.Value 'Übertrage TextBox in Zelle
    [MP!E4].Value = TextBox2.Value
    [MP!F4].Value = TextBox3.Value
    [MP!G4].Value = TextBox4.Value

    Label15.Caption = Sheets("MP").Range("D5").Value 'Übergabe von Zelle zu Label
    Label16.Caption = Sheets("MP").Range("E5").Value
    Label17.Caption = Sheets("MP").Range("F5").Value
    Label18.Caption = Sheets("MP").Range("G5").Value

    Call Label_formatieren 'Rufe die Formatierungsprozedur auf
End Sub

Private Sub Label_formatieren()
    Dim index As Integer
    For index = 15 To 18
        With UFRechnen2.Controls("Label" & CStr(index))
            If Left(CStr(.Caption), 1) = "-" Then
                .ForeColor = RGB(255, 0, 0) 'Setze Schriftfarbe auf Rot
                .Font.Bold = True 'Setze Schrift auf fett
            Else
                .ForeColor = RGB(0, 0, 0) 'Setze Schriftfarbe auf Schwarz
                .Font.Bold = False 'Setze Schrift auf normal
            End If
        End With
    Next index
End Sub

Häufige Fehler und Lösungen

  • Fehlermeldung "Erwarte Then oder GoTo": Überprüfe, ob in Deinem Code die Klammern korrekt gesetzt sind. Der Ausdruck If Left(CStr(.Caption), 1) = "-" Then muss korrekt ohne zusätzliche Klammern stehen.

  • Labels werden nicht aktualisiert: Stelle sicher, dass Du den Call Label_formatieren Befehl nach der Zuweisung der Caption einfügst.


Alternative Methoden

Falls Du eine andere Methode zur Formatierung Deiner Labels verwenden möchtest, kannst Du auch Conditional Formatting in Excel verwenden, jedoch ist dies in UserForms nicht direkt möglich. Daher bleibt die VBA-Methode die effektivste.


Praktische Beispiele

Angenommen, Du hast negative Werte in den Zellen D5, E5, F5 und G5. Wenn einer dieser Werte kleiner als 0 ist, wird die entsprechende Beschriftung in Deiner UserForm rot und fett dargestellt. Dies ist besonders nützlich, um schnell visuelle Rückmeldungen zu erhalten.


Tipps für Profis

  • Verwende Konstanten: Anstatt die Farben direkt im Code zu verwenden, kannst Du Konstanten definieren, um Deinen Code lesbarer zu machen.

  • Debugging: Verwende Debug.Print oder MsgBox, um Variablenwerte während der Ausführung zu überprüfen, was Dir helfen kann, Fehler schneller zu finden.


FAQ: Häufige Fragen

1. Wo muss ich den Code einfügen? Der Code sollte im Modul der UserForm eingefügt werden, die die Labels enthält.

2. Funktioniert dieser Code in allen Excel-Versionen? Der VBA-Code sollte in den meisten aktuellen Excel-Versionen funktionieren, die UserForms unterstützen, wie Excel 2010 und neuer.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige