Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1604to1608
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

UF-Text,-ComboBox prüfen

UF-Text,-ComboBox prüfen
30.01.2018 08:21:28
Klaus
Hallo,
in einer UF soll geprüft werden ob die Steuerelemente ausgefüllt wurden.
Hierzu ändert sich die Farbe des Steuerelementes.
Kriterium ist noch das die Prüfung nur für bestimmte Elemente erfolgen soll.
Ein Beispiel habe ich beigefügt, jedoch rührt sich nichts.
Danke!
Gruß,Klaus
https://www.herber.de/bbs/user/119381.xlsm

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UF-Text,-ComboBox prüfen
30.01.2018 08:51:59
Peter(silie)
Hallo,
soweit ich das sehen kann, liegt es an der Farbe auf die du prüfst.
Hier deine Mappe mit neuem Code: https://www.herber.de/bbs/user/119386.xlsm
Hier nur Code:
(einfach ganz an den Afang des UF Moduls setzen)
Option Explicit
Public Enum Colors
LightBlue = 16777152
BlueCustom = 16721920
WhiteDarker = 15921906
End Enum
Private Sub CommandButton1_Click()
If Me.cboSt1.BackColor = Colors.LightBlue Then
ControlBlink
ElseIf Me.txtSt1.BackColor = Colors.LightBlue Then
ControlBlink
ElseIf Me.txtSt2.BackColor = Colors.LightBlue Then
ControlBlink
End If
End Sub
Private Sub ControlBlink()
Dim color1(1) As Long
Dim blink As Boolean
Dim t As Double
Dim i As Long
Const TIME As Double = 0.08
On Error Resume Next
color1(0) = 255
color1(1) = 125
Do
blink = Not blink
Me.cboSt1.BackColor = color1(-blink)
Me.txtSt1.BackColor = color1(-blink)
Me.txtSt2.BackColor = color1(-blink)
t = Timer + TIME
Do While Timer  5
Me.cboSt1.BackColor = Colors.LightBlue
Me.txtSt1.BackColor = Colors.LightBlue
Me.txtSt2.BackColor = Colors.LightBlue
End Sub
Innerhalb des Enums kannst du jede weitere Farb-Konstante reinschreiben die dir gefällt.
Das Enum heißt Colors und ist für alle Module usw. auch unter diesem Namen erreichbar.
Wenn du also eine Farbe Prüfen oder setzen willst, musst du nicht mehr den Long wert
schreiben und ein Kommentar setzen um zu wissen was es ist, sondern siehst sofort welche Farbe.
Also Farbe setzen mit: Combobox.BackColor = Colors.LightBlue
Anzeige
AW: UF-Text,-ComboBox prüfen
30.01.2018 09:27:03
Klaus
Hallo Peter,
erstmal Dank für Deine Antwort.
Leider ist mir das zu umständlich. In meiner UF befinden sich mehr als 300 Steuerelemente,
welche je nach Gegebenheit geprüft werden sollen.
z.B. 10 Elemente mit "cboMT" und 15 Elemente mit "txtMT"
davon sind z.B. 9 mit Farbe hinterlegt.
Jetzt habe ich das wie folgt gelöst:
Private Sub CommandButton1_Click()
Dim bAnzahl As Byte
Dim oName  As Object
For Each oName In Controls  'Prüfen ob die blauen Steuerelemente ausgefüllt sind
Select Case TypeName(oName)
Case "ComboBox"
If Left(oName.Name, 5) = "cboSt" And oName.BackColor = &HFFFFC0 Then  _
bAnzahl = bAnzahl + 1
Case "TextBox"
If Left(oName.Name, 5) = "txtSt" And oName.BackColor = &HFFFFC0 Then bAnzahl  _
= bAnzahl + 1
End Select
Next oName
MsgBox bAnzahl
If bAnzahl = 0 Then
cmdSave.Enabled = True
ElseIf bAnzahl > 0 Then
cmdSave.Enabled = False
End If
End Sub

Gruß, Klaus
Anzeige
AW: UF-Text,-ComboBox prüfen
30.01.2018 10:09:18
Peter(silie)
Hallo,
dann kannst du aber auch mit Klassen arbeiten.
Hier ein Beispiel:
(nicht getestet)
UserForm Code:

Option Explicit
'Counter der bei Btn Click geprüft wird
Public ValidationCounter As Long
Public MaxAmount As Long
'Farben
Public Enum Colors
LightBlue = 16777152
BlueCustom = 16721920
WhiteDarker = 15921906
End Enum
'Klassen Objekte für die Controls
Private cls_vc() As ValidationControl
Private Sub CommandButton1_Click()
'Falls Counter = Prüfsumme dann mach was
If ValidationCounter = MaxAmount Then Debug.Print "Do Stuff"
End Sub
Private Sub UserForm_Initialize()
Dim intCounter As Integer
DefineValidationObjects
For intCounter = 1 To 12
cboSt1.AddItem Format(DateSerial(1, intCounter, 1), "mmmm")
Next
For intCounter = 2 To 3
Controls("cboSt" & intCounter).List = cboSt1.List
Next
cmdSave.Enabled = False
End Sub
Private Sub DefineValidationObjects()
Dim ctl As Control
Dim i As Long
i = 1
For Each ctl In Me.Controls
Select Case TypeName(ctl)
Case "ComboBox"
If Left(ctl.Name, 5) = "cboSt" Then
ReDim Preserve cls_vc(i)
Set cls_vc(i) = New ValidationControl
Set cls_vc(i).clsCombobox = ctl
i = i + 1
End If
Case "TextBox"
If Left(ctl.Name, 5) = "txtSt" Then
ReDim Preserve cls_vc(i)
Set cls_vc(i) = New ValidationControl
Set cls_vc(i).clsTextbox = ctl
i = i + 1
End If
End Select
Next ctl
MaxAmount = i
End Sub
ValidationControl Klasse:
Option Explicit
Public WithEvents clsTextbox As MSForms.TextBox
Public WithEvents clsCombobox As MSForms.ComboBox
Private Sub clsTextbox_Change()
If Len(clsTextbox.Value)  0 Then
UserForm1.ValidationCounter = UserForm1.ValidationCounter - 1
End If
Else
clsTextbox.BackColor = Colors.WhiteDarker
If UserForm1.ValidationCounter  0 Then
UserForm1.ValidationCounter = UserForm1.ValidationCounter - 1
End If
Else
clsTextbox.BackColor = Colors.WhiteDarker
If UserForm1.ValidationCounter 
Bei 300+ Controls ist das wesentlich kürzer als 300 Change Events in die Userform zu prügeln.
Keine Ahnung ob der Counter reibungslos funktioniert in der Form,
allerdings ist es wesentlich schneller wenn du bei einem Btn Click 2 Integer vergleichst
als 300 Controls abzuklappern
Anzeige
AW: UF-Text,-ComboBox prüfen
30.01.2018 10:19:44
Klaus
Hallo Peter,
Du legst Dich ganz schon ist Zeug für mich.
Danke!
Da ich kein VBA Profi bin und bisher noch nicht mit Klassen gearbeitet habe, muß ich mich
erstmal in Deinen Code einarbeiten.
Schau mer mal.
Gruß, Klaus

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige