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

Vereinfachung / Zusammenfassung möglich?

Vereinfachung / Zusammenfassung möglich?
24.04.2014 08:27:49
Sebastian
Hallo in die Runde!
Ich habe ein UserForm mit mehreren gleichartigen Eingabemöglichkeiten, alle nach dem Schema: TextBox (zur Texteingabe), Checkbox (zur Markierung, ob Eintrag gelöscht werden soll) und ToggleButton (zur Markierung, ob der Eintrag wichtig ist). Diese drei Elemente gehören jeweils zusammen.
Dabei gelten folgende Bedingungen:
Wird die Löschmarkierung gesetzt, wird die Textbox rot eingefärbt; bei Markierung "wichtig" werden Togglebutton und Textbox gelb eingefärbt.
Wichtig: Wenn die Textbox als "wichtig" markiert ist, darf diese nicht mit "löschen" markiert werden (dann erscheint die Fehlermeldung!)
Dazu habe ich folgendes Sub geschrieben:
Private Sub CheckBox1_Click()
Select Case CheckBox1
Case True
If ToggleButton1 = True Then
MsgBox "Als 'wichtig' markierte Einträge können nicht gelöscht werden!",  _
vbCritical
CheckBox1 = False
TextBox1.BackColor = &HC0FFFF
Exit Sub
End If
TextBox1.BackColor = &HC0C0FF
Case False
TextBox1.BackColor = &H80000005
End Select
End Sub
Dies funktioniert soweit auch prima.
Nun aber meine Frage dazu:
Da ich insgesamt zehn solcher Eingabemöglichkeiten im UserForm habe, würde ich es gerne vermeiden, die o. g. Sub zehn Mal in den Code zu bringen und nur jeweils die Nummerierungen der Elemente zu ändern.
Kann ich dies auch irgendwie "zusammenfassen" oder mit einer Prozedur verbinden, sodass ich nur einen Code (Sub) habe und automatisch erkannt wird, welches Element markiert wurd (z.B. Löschmarkierung3 wird aktiviert, also alles für Elemente "3" abspulen)?
Vielen Dank schonmal vorab :)

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

Betreff
Datum
Anwender
Anzeige
AW: Vereinfachung / Zusammenfassung möglich?
24.04.2014 09:27:36
Tino
Hallo,
mach doch eine Sub und prüfe dort alle in einer Schleife.
Voraussetzung der Aufbau ist richtig zugeordnet
Textbox1 -> ToggleButton1 -> CheckBox1
Textbox2 -> ToggleButton2 -> CheckBox2
usw…
Private Sub CheckEingabe()
Dim i%
For i = 1 To 10
Select Case Me("CheckBox" & i)
Case True
If Me("ToggleButton" & i) = True Then
MsgBox "Als 'wichtig' markierte Einträge können nicht gelöscht werden!", _
vbCritical
Me("CheckBox" & i) = False
Me("TextBox" & i).BackColor = &HC0FFFF
'Exit Sub
Else
Me("TextBox" & i).BackColor = &HC0C0FF
End If
Case False
Me("TextBox" & i).BackColor = &H80000005
End Select
Next i
End Sub
Gruß Tino

Anzeige
Klassenprogrammierung oder einfach Sub...
24.04.2014 09:31:42
EtoPHG
Hallo Sebastian,
Du hast zur Lösung des Problems die Möglichkeiten:
1. Klassenprogrammierung, wovon ich bei deinem VBA-Level vorläufig absehen würde oder
2. ein generische Subroutine einzuführen, welche ich empfehlen würde.
Diese könnte dann z.B. so aussehen:

Private Sub CheckBox1_Click()
CheckIt 1
End Sub
Private Sub CheckBox2_Click()
CheckIt 2
End Sub
Private Sub CheckBox3_Click()
CheckIt 3
End Sub
'...etc
Sub CheckIt(iCtrl As Integer)
If Me.Controls("CheckBox" & iCtrl) Then
If Me.Controls("ToggleButton" & iCtrl) Then
MsgBox "Als 'wichtig' markierte Einträge können nicht gelöscht werden!", vbCritical
Me.Controls("CheckBox" & iCtrl) = False
Me.Controls("TextBox" & iCtrl).BackColor = &HC0FFFF
Exit Sub
End If
Me.Controls("TextBox" & iCtrl).BackColor = &HC0C0FF
End If
End Sub
Gruess Hansueli

Anzeige
AW: Klassenprogrammierung oder einfach Sub...
24.04.2014 09:55:42
Sebastian
Wunderbar.
Vielen Danke für die Hinweise.
Die Programmierung einer generischen Sub war mir bis dato unbekannt bzw. da ich mich in VBA selbst ausprobiere, habe ich mich da noch nicht ran getraut. Nun klappt es und - ich habe verstanden, wie die generischen Subs funktionieren. :)

AW: Vereinfachung / Zusammenfassung möglich?
24.04.2014 09:45:27
Rudi
Hallo,
prinzipiell kannst du dafür eine eigene Klasse einsetzen.
Einfacher ist's aber z.B. so:
Private Sub CheckBox1_Click()
CheckBoxClick 1
End Sub
Private Sub CheckBox2_Click()
CheckBoxClick 2
End Sub
Private Sub CheckBoxClick(intControl As Integer)
Dim objCHK As MSForms.CheckBox, objTGB As MSForms.ToggleButton, objTXT As MSForms.TextBox
Set objCHK = Controls("Checkbox" & intControl)
Set objTGB = Controls("Togglebutton" & intControl)
Set objTXT = Controls("Textbox" & intControl)
Select Case objCHK
Case True
If objTGB = True Then
MsgBox "Als 'wichtig' markierte Einträge können nicht gelöscht werden!", vbCritical
objCHK = False
objTXT.BackColor = &HC0FFFF
Exit Sub
End If
objTXT.BackColor = &HC0C0FF
Case False
objTXT.BackColor = &H80000005
End Select
End Sub

Gruß
Rudi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige