Anzeige
Archiv - Navigation
1924to1928
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
VBA Textbox Change
13.04.2023 11:28:51
Tim

Hallo zusammen,

ich hab ein kleines Problem folgender Code Ausschnitt:

If Cbdl(.Value) 0 Then
Textbox1.Text="h"
Textbox1.ForeColor = vbRed
Textbox1.Font.Name ="Windings 3"

....

Soweit so gut aber er ändert mir nicht die Farbe und auch nicht die Schriftart.. Den Text Inhalt ändert er so wie er das soll.

Mache ich etwas falsch?

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schreibfehler!?
13.04.2023 11:42:44
hary
Moin
Schreibfehler!? und nur Font
TextBox1.Font = "Wingdings 3"
TextBox1.Text = "h"
TextBox1.ForeColor = vbRed
gruss hary


AW: Schreibfehler!?
13.04.2023 11:48:39
Oberschlumpf
vor allem aber zuerst Font einstellen, erst dann Text = zuweisen


AW: Schreibfehler!?
13.04.2023 12:17:20
Tim
Mit dem Schreibfehlerfehler habe ich geändert. Trotzdem ändert sich nichts. Hier einmal der ganze Code.
Ich lege die Farbwerte auch in UserForm_Initialize() fest. Damit hat es etwas zu tun, dass habe ich schon rausgefunden. Aber auch keine richtige Lösung, wie ich das anders lösen kann.



Private Sub TextBox56_Change()
With TextBox37
If IsNumeric(.Value) Then

    If CDbl(.Value) = 0 Then
            TextBox56.Font.Name = "Wingdings 3"
            TextBox56.Text = "o"
            TextBox56.ForeColor = vbWhite
            TextBox56.Font.Size = "10"

    ElseIf CDbl(.Value) > 0 Then
        TextBox56.Font.Name = "Wingdings 3"
        TextBox56.Text = "h"
        TextBox56.ForeColor = vbRed
        TextBox56.Font.Size = "10"
    Else
        TextBox56.Font.Name = "Wingdings 3"
        TextBox56.Text = "i"
        TextBox56.ForeColor = vbGreen
        TextBox56.Font.Size = "10"
End If
End If

End With
  
End Sub

Private Sub UserForm_Initialize()

Dim crt As Control
Dim objControl As MSForms.Control
Dim objControl1 As MSForms.Control
Dim objControl2 As MSForms.Control

UrsachenUserFormAlle.BackColor = RGB(31, 78, 121)

TextBox1.Text = Worksheets("Pivot").Range("G1").Value
TextBox2.Text = Worksheets("Pivot").Range("H1").Value

TextBox3.Text = Worksheets("Pivot").Range("G2").Value
TextBox4.Text = Worksheets("Pivot").Range("H2").Value
TextBox5.Text = Worksheets("Pivot").Range("I2").Value
TextBox6.Text = Worksheets("Pivot").Range("J2").Value


TextBox17.Text = Worksheets("Pivot").Range("J7").Value
TextBox27.Text = Worksheets("Pivot").Range("H7").Value

TextBox37 = TextBox17 - TextBox27
TextBox56 = TextBox37


For Each objControl In Controls
               If TypeOf objControl Is MSForms.TextBox Then
                   If objControl Is TextBox1 Or objControl Is TextBox2 Or objControl Is TextBox3 Or objControl Is TextBox4 Or objControl Is TextBox5 Or objControl Is TextBox6 _
                   Then
                        objControl.BackColor = vbWhite
                        objControl.ForeColor = vbBlack
                        objControl.Font.Size = "10"
                        objControl.SpecialEffect = 0
                     Else
                       objControl.BackColor = RGB(32, 78, 121)
                        objControl.ForeColor = vbWhite
                        objControl.Font.Name = "Arial"
                        objControl.Font.Size = "12"
                        objControl.SpecialEffect = 0
                   End If
                 End If
               Next

        For Each objControl1 In Controls
                    If TypeOf objControl1 Is MSForms.Frame Then
                        objControl1.Font.Bold = True
                        objControl1.BackColor = RGB(32, 78, 121)
                        objControl1.ForeColor = vbWhite
                        objControl1.Font.Name = "Arial"
                        objControl1.Font.Size = "12"
                    End If
                Next

                        For Each objControl2 In Controls

                            If TypeOf objControl2 Is MSForms.Label Then

                                objControl2.BackColor = RGB(32, 78, 121)
                                objControl2.ForeColor = vbWhite
                                objControl2.Font.Name = "Arial"
                                objControl2.Font.Size = "10"
                            End If
                        Next

End Sub



Anzeige
liegt an der für uns unsichtbaren Arbeitsmappe
13.04.2023 12:21:53
Jowe


AW: Schreibfehler!?
13.04.2023 12:46:11
Nepumuk
Hallo Tim,

müsste an Stelle von "Private Sub TextBox56_Change()" nicht "Private Sub TextBox37_Change()" stehen?

Gruß
Nepumuk


AW: Schreibfehler!?
13.04.2023 12:57:38
Tim
Ne das stimmt so. In der Textbox 56 nehme ich eigentlich nur Veränderungen vor, an Schrift und Schriftsatz. Es wird funktioniert auch alles nur die Formatierung passt nicht.

Die ich vorher in der UserForm_Initialize() festgelegt habe.


AW: Schreibfehler!?
13.04.2023 13:07:01
Nepumuk
Hallo Tim,

aber du gibst doch in TextBox37 eine Zahl ein. TextBox56 soll doch nur den Pfeil anzeigen.

Gruß
Nepumuk


Anzeige
AW: Schreibfehler!?
13.04.2023 13:32:29
Tim
Genau, die Textboxen sind alle auf der Userform. Und da brauche ich ja nicht die Pfeile und Textbox 37 wird der Wert eingetragen und in Textbox56 soll dann der Pfeil angezeigt, werden wenn die Zahl größer oder kleiner Null ist.


AW: Schreibfehler!?
13.04.2023 13:36:14
Nepumuk
Hallo Tim,

na dann musst du das in die "Private Sub TextBox37_Change()" - Prozedur packen.

Gruß
Nepumuk


AW: Schreibfehler!?
13.04.2023 15:59:40
Daniel
Platziere anstelle der textbox56 eine Multipage zwei Seiten.
Auf den beiden Seiten platziert du eine Texbox oder ein Kabel, in welchem du den gewünschten Pfeil in der passen Schriftart und Farbe einstellst. Das alles machst du im Editor.
Im Code schaltest du dann nur noch die gewünschte MultipageSeite aktiv (.Value = Seriennummer)
Die Reiter der Multipage kann man ausblenden, so dass der Anwender nicht sieht, dass es eine Multipage ist.

Gruß Daniel


Anzeige
Rekursiv!
13.04.2023 20:33:54
Yal
Hallo Tim,

wenn Du in "TextBox56_Change" den Wert von TextBox56 änderst, dann musst Du die Ereignis-Ausführung blockieren, sonst wird diese Prozedure immer wieder ausgerufen: Application.EnableEvents = False

Allgemein: vermeide Wiederholung, setze einen Standard, oder Default, und behandle nur die Ausnahmen.

Private Sub TextBox56_Change()
'3 mal TextBox37 und 12 mal TextBox56. Welche sollte man als "With" platzieren?
    If Not IsNumeric(TextBox37.Value) Then Exit Sub
    Application.EnableEvents = False 'gegen endlose Schleife
    With TextBox56
    'Default: wird immer gemacht
        .Font.Name = "Wingdings 3"
        .Font.Size = "10"
        If CDbl(TextBox37.Value) = 0 Then
            .Text = "o"
            .ForeColor = vbWhite
        ElseIf CDbl(TextBox37.Value) > 0 Then
            .Text = "h"
            .ForeColor = vbRed
        Else ' 0
            .Text = "i"
            .ForeColor = vbGreen
        End If
    End With
    Application.EnableEvents = True
End Sub

Private Sub UserForm_Initialize()
Dim Ctrl As Control
Dim Elt

    Application.EnableEvents = False 'gegen endlose Schleife
    UrsachenUserFormAlle.BackColor = RGB(31, 78, 121)
    
    For Each Elt In Split("1:G1 2:H1 3:G2 4:H2 5:I2 6:J2 17:J7 18:H7")
        Controls("Textbox" & Split(Elt, ":")(0)) = Worksheets("Pivot").Range(Split(Elt, ":")(1)).Value
    Next
    TextBox37.Text = CStr(CDbl(TextBox17.Text) - CDbl(TextBox27.Text))
    TextBox56.Text = TextBox37.Text

    For Each Ctrl In Controls
    'setze Standardwert
        Ctrl.BackColor = RGB(32, 78, 121)
        Ctrl.ForeColor = vbWhite
        Ctrl.Font.Name = "Arial"
        Ctrl.Font.Size = "10"
    'behandle Ausnahmen
        If TypeOf Ctrl Is MSForms.TextBox Then
            If InStr(1, "1;2;3;4;5;6", Right(Ctrl.Name, 1)) Then
                Ctrl.Font.Name = "Arial" 'eigentlich nicht Arial, aber die Information fehlt
                Ctrl.SpecialEffect = 0
            Else
                Ctrl.BackColor = RGB(32, 78, 121)
                Ctrl.Font.Size = "12"
                Ctrl.SpecialEffect = 0
            End If
        End If
        If TypeOf Ctrl Is MSForms.Frame Then
            Ctrl.Font.Bold = True
            Ctrl.Font.Size = "12"
        End If
    Next
    Application.EnableEvents = True
End Sub
VG
Yal


Anzeige
AW: Rekursiv!
14.04.2023 08:04:45
Tim
Erst einmal. Vielen Dank für die ganzen Hilfestellungen. Diese helfen mir alle sehr weiter, da ich gerade dabei bin VBA mir anzueignen hilft das schon sehr.

Der Code ist ja um einiges gekürzt.. Ich denke das ich diesen auch nachvollziehen kann, was, wo passiert. Wenn ich den Code jetzt aber ausführe bekomme ich immer den Laufzeitfehler 13 angezeigt. Womit könnte das zusammenhängen?


in welcher Zeile? (owT)
14.04.2023 09:53:00
Pierre


AW: in welcher Zeile? (owT)
14.04.2023 12:07:17
Tim
Leider steht die Zeile nicht dabei.

Nur Laufzeitfehler '13':
Typen unverträglichkeit


und im Code wird bei Fehler keine Zeile markiert?
14.04.2023 13:59:25
Oberschlumpf
owT


AW: in welcher Zeile? (owT)
14.04.2023 16:16:24
Yal
Hallo Tim,

dann ist es Zeit für die nächste Entdeckung auf diener Reise zum Programmierer: im Schrittmodus laufen lassen (F8) und schauen, wo der Code rauspringt.
Öffne dabei das Lokalfenster und schaue, was darin angezeigt wird (auch wichtig).

VG
Yal

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige