Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1320to1324
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
Userform Checkbox ein/ausblenden
18.07.2013 15:18:38
kultnoob
Hallo zusammen,
im Grunde ist meine Frage eigentlich ganz simple für euch doch stellt sich mein Hirn gerade ein wenig quer.
Ich habe eine Userform in welcher ein Textfeld und 7 CheckBox(en) sind (vorerst). Nun ist mein Ziel, auf Basis des Wertes aus dem Textfeld eine der 7 Checkboxes anzuklicken. Jeder Checkbox ist ein Bereich (per Überschrift) zugeordnet. Der Wert im Textfeld wird aus einer Zelle genommen. Das passt soweit auch.
Im Beispiel:
Textbox1 enthält: Teil A
Checkbox1: von Bereich A
Checkbox2: von Bereich B
.
.
.
Checkbox7: von Bereich G
Ich versuche nun die ganze Zeit schon einen Code zu schreiben der eigentlich nur sagt, wenn eine Checkbox ausgewählt wird, blende alle anderen aus. Nehme ich den Hacken wieder raus, dann lass alle Checkbox(en) wieder erscheinen.
Mit Visible = False/True klappt das teilweise auch mehr oder weniger aber dann wäre ja dieser Codeteil sehr lang da ich ja jede Bedingung durchspielen müsste. Kann man das nicht so wie eine If-Anweisung lösen? Wenn dann bla bla?
Muss ich diesen Code dann in der Userform hinterlegen? Oder hinter den einzelnen Checkbox(en)?
Hinterlege ich diesen "hinter" die Userform, geht mal gar nichts...
Hinterlege ich diesen "hinter die Checkbox, dann gehts. Aber dann hätte ich ja mind. 8 Subs. Und da kommen noch ein paar hinzu. Und mit ein paar meine ich noch 24 Textfelder á 7 Checkbox(en).
Warum ich das ganze mache? Im Grunde werden mir max. 25 Teile angezeigt die dann einzeln per Checkbox sortiert werden. Danach werden diese später erneut in Excel sortiert aufgelistet auf die einzelnen Bereich und daraus entsteht dann ein Diagramm. Natürlich sollte nun die Frage kommen, warum nicht einfach händisch oder per Formel. Nun da sich die Teile ändern. Und um dies nicht immer im Code abzuändern bzw. bei den Formeln, soll alles in einer Userform ausgegeben werden und da kann man dann sicher sortieren, dass nichts verloren geht.
Primär geht es mir nur um eine Möglichkeit, den Code einfach und kurz zu halten.

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform Checkbox ein/ausblenden
18.07.2013 15:25:18
Hajo_Zi
Checkbox1.Visible=Textbox1="Teil A"
Checkbox2.Visible=Textbox1="Teil B"

AW: Userform Checkbox ein/ausblenden
18.07.2013 15:29:18
kultnoob
Hi,
habe ich mich falsch ausgedrückt. Im Textfeld kann alles drinstehen. Gurke, Tomate, Stein, Dreck, Auto. Ich muss es dann nur einem Bereich zuteilen.
In Deinem Beispiel gehst Du davon aus, dass im Textfeld1 immer Teil A steht. Leider nein...

AW: Userform Checkbox ein/ausblenden
18.07.2013 15:32:30
Hajo_Zi
ich bin davon ausgegangen das die Boxen nach dem Inhalt ein und ausgeblendet werden sollen. Bereiche werden da nicht eingegeben. Dann habe ich das wohl falsch interpretiert.
Gruß Hajo

Anzeige
AW: Userform Checkbox ein/ausblenden
18.07.2013 15:38:57
kultnoob
Ich könnte es auch per Dropdown in der Excelliste machen.
Irgendetwas - Menge 5 - Bereich B
Irgendetwas - Menge 3 - Bereich G
Irgendetwas - Menge 1 - Bereich A
.
.
.
usw...

AW: Userform Checkbox ein/ausblenden
18.07.2013 15:54:34
Rudi
Hallo,
Aber dann hätte ich ja mind. 8 Subs.
Na und?
Private Sub CheckBox1_Click()
HideChkBx CheckBox1
End Sub
Private Sub CheckBox2_Click()
HideChkBx CheckBox2
End Sub
Private Sub CheckBox3_Click()
HideChkBx CheckBox3
End Sub
'etc.
Sub HideChkBx(dieBox As Object)
Dim i As Integer
For i = 1 To 8
If i  CInt(Mid(dieBox.Name, 9)) Then
UserForm1.Controls("CheckBox" & i).Visible = Not dieBox
End If
Next
End Sub

Gruß
Rudi

Anzeige
AW: Userform Checkbox ein/ausblenden
18.07.2013 16:43:55
fcs
Hallo kultnoob,
Checkboxen sind hier wohl der falsche Ansatz. Wenn du immer nur eine Checkbox wählen willst, dann wären 8 oder neun Optionsschaltflächen in einem Frame je Textbox der korrektere Ansatz.
Ich würde hier komplett auf Checkboxen verzichten und zu jeder Textbox eine Listbox oder eine Combobox für die Auswahl des zugehörigen Bereiches im Userform plazieren.
Gruß
Franz

AW: Userform Checkbox ein/ausblenden
19.07.2013 07:10:55
kultnoob
Morgen zusammen,
vielen Dank für den Ansatz. Die Idee mit der Combobox (hoffe damit ist das Kombinationsfeld gemeint) kam mir gestern auch schon. Mit dieser Variante habe ich aber absolut keinen Plan wie ich das befülle. Aber ich bin ja lernfähig... :D
Im Grunde ist es auch die bessere Möglichkeit. Man hat seinen "Teil XY" und ordnet es einem Bereich zu. Nichts ausblenden oder ähnliches. Lasst mich mal versuchen, dass hinzubekommen.
Muss man ja irgendwie deklarieren können. Und dann muss ich nur ncoh einen Weg finden, den gewählten Bereich zu definieren und diesen geordnet dann in eine Exceldatei auszugeben.

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 07:45:37
kultnoob
Hi,
Ok, die Eingabe der einzelnen Bereich geschieht über .additem
Code:

Sub Comboaction
With Teil_Auswahl.ComboBox1
.AddItem "Bereich0", 0
.AddItem "Bereich1", 1
.AddItem "Bereich2", 2
.AddItem "Bereich3", 3
.AddItem "Bereich4", 4
.AddItem "Bereich5", 5
.AddItem "Bereich6", 6
End With
End Sub
Ich starte die Userform über ein in Excelbutton in welchem ein Makro hinterlegt ist. Das funktioniert glaub auch zum Teil. ABER... Wenn ich die Combobox bzw. den Pfeil zur Auswahl anklicke, dann erscheint mir zwar auf den ersten Blick alles aber sobald ich einen Bereich anklicke, wählt es einen anderen und dann erscheint in der Combobox alles 3 mal. Also Bereich 1 - 6, dann erneut 1 - 6 und nochmal. Warum das denn?

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 08:11:27
fcs
Hi,
dein Makro darfs du nur einmal für jede Combobox starten und zwar in der
Usern_Initialize-Ereignis-Prozdur des Userforms.
In der Summe wird es aber einfacher, wenn du in einem separaten Tabellenblatt der Datei in einer Spalte die Auswahlliste für die Bereiche eingibst. Für die Zellen mit der Auswahlliste legst du dann einen Namen fest.
Im Userform-Editor trägst du dann unter der Eigenschaft "RowSource" der Comboboxen den entsprechenden Namen ein. Das ist auch insgesamt pflegeleichter, wenn du Auswahlliste anpassen willst.
Gruß
Franz

AW: Userform Checkbox ein/ausblenden
19.07.2013 10:59:31
kultnoob
Hi,
ja, das habe ich schon gelesen. Wie und wo das geht müsste ich hinbekommen. Um eine Mehrauswahl zu verhinden, habe ich vor dem ersten AddItem ein Clear gesetzt. Dann geht es, doch versuche ich gerade eine Möglichkeit, auch hier im Forum gefunden
https://www.herber.de/forum/archiv/272to276/273392_mehrere_Comboboxen_fuellen.html
wie ich jede einzelne Befüllung der Comboboxen im Code umgehen kann. Aber ich kriegs nicht hin. Ich werde dies mal mit einer Range in einem seperaten Sheet machen. Ein Anpassung sollte eigentlich sehr sehr selten vorkkommen. Aber man kann ja nie wissen.
Ach ich hätte da noch tausend Fragen doch will ich nicht alles vorgekaut bekommen. Außer ich komm echt nicht weiter. Ich teste nun die Range in einem anderen Sheet...

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 13:33:49
kultnoob
Hi,
also die Comboboxen sind nun befüllt und das passt soweit.
Das nächste Ziel ist nun folgendes. Schau ob in 1 ein Wert steht und übernehme ihn in das erste Textfeld oder lass das Textfeld und die Combobox ausblenden. Ich will das Ganze in einer Schleife machen doch krieg ich es nicht hin, die Combobox anzusprechen. Mein bisheriger Code sieht so aus:
lrow2 = Sheets(2).UsedRange.Rows.Count
For i = 22 To lrow2 'Ab dort werden die Werte eingetragen
For a = 1 To 7 'Bisher sind 7 Comboboxen vorhanden
If .Cells(i, 1).Value  Empty Then Userform.controls("TextBox" & a).Value = _
.Range(i,1).Value Else:
Userform.controls("ComboBox" & a).Visible = False
Userform.controls("TextBox" & a).Visible = False
Exit For
Next a
Next i
Er soll halt zuerst schauen, ist die Zelle nicht leer, dann übertrage den Zelleninhalt. Falls leer, dann blende Textfeld und Combobox aus. Bisher hängt es an diesem Codesegment:
Userform.controls("TextBox" & a).Value = .Range(i, 1).Value

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 14:09:08
Rudi
Hallo,
mangelhafte Referenzierung. Du kannst nicht einfach ohne With-Rahmen einen . vor Range setzen.
Userform.controls("TextBox" & a).Value = Sheets(2).Range(i, 1).Value
Gruß
Rudi

AW: Userform Checkbox ein/ausblenden
19.07.2013 14:56:28
kultnoob
Hi Rudi,
mein Fehler. Habe nur einen Teil des Codes gezeigt. Anbei der komplette Code...
Private Sub UserForm()
Userform.Show
'Der Auswertungsdatei den Namen Grafik zuweisen
Grafik = ActiveWorkbook.Name
With Workbooks(Grafik).Sheets(2)
lrow2 = Sheets(2).UsedRange.Rows.Count
For i = 22 To lrow2 'Ab dort werden die Werte eingetragen
For a = 1 To 7 'Bisher sind 7 Comboboxen vorhanden
If .Cells(i, 1).Value  Empty Then Userform.controls("TextBox" & a).Value = _
.Range(i, 1).Value _
Else:
Userform.controls("ComboBox" & a).Visible = False
Userform.controls("TextBox" & a).Visible = False
Exit For
Next a
Exit For
Next i
End With
End Sub
Im Grunde beziehe ich mich ja auf sheet(2) durch die With...
Leider meckert er immer noch... Fehlermeldung beim Codefragment
Userform.controls("TextBox" & a).Value = Sheets(2).Range(i, 1).Value _
Else:
Laufzeitfehler '1004'
Anwendungs- oder objektdefinierter Fehler
Ich bin das nun ein paar mal durchgegangen aber ich finde den Fehler nicht. Sehr Ihr einen Fehler?

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 14:58:53
kultnoob
Hi Rudi,
mein Fehler. Habe nur einen Teil des Codes gezeigt. Anbei der komplette Code...
Private Sub UserForm()
Userform.Show
'Der Auswertungsdatei den Namen Grafik zuweisen
Grafik = ActiveWorkbook.Name
With Workbooks(Grafik).Sheets(2)
lrow2 = Sheets(2).UsedRange.Rows.Count
For i = 22 To lrow2 'Ab dort werden die Werte eingetragen
For a = 1 To 7 'Bisher sind 7 Comboboxen vorhanden
If .Cells(i, 1).Value  Empty Then Userform.controls("TextBox" & a).Value = _
.Range(i, 1).Value _
Else:
Userform.controls("ComboBox" & a).Visible = False
Userform.controls("TextBox" & a).Visible = False
Exit For
Next a
Exit For
Next i
End With
End Sub
Im Grunde beziehe ich mich ja auf sheet(2) durch die With...
Leider meckert er immer noch... Fehlermeldung beim Codefragment
Userform.controls("TextBox" & a).Value = Sheets(2).Range(i, 1).Value _
Else:
Laufzeitfehler '1004'
Anwendungs- oder objektdefinierter Fehler
Ich bin das nun ein paar mal durchgegangen aber ich finde den Fehler nicht. Sehr Ihr einen Fehler?

Anzeige
AW: Userform Checkbox ein/ausblenden
19.07.2013 16:31:42
fcs
Hallo Rudi,
du musst Cells statt Range verwwwenden!
Die Zeile
Userform.Show
gehört an das Ende der Prozedur, wenn du vor der Anzeige des Userforms Werte in die Textboxen einlesen willst.
Ich meine es müsste etwa wie folgt aussehen, wobei ich wegen besserer Übersicht die If-Konstrukten in mehrere Zeilen aufgelöst habe.
Gruß
Franz
Private Sub UserForm_anzeigen()
Dim Grafik, i, a, lrow2
'Der Auswertungsdatei den Namen Grafik zuweisen
Grafik = ActiveWorkbook.Name
With Workbooks(Grafik).Sheets(2)
With .UsedRange
lrow2 = .Row + .Rows.Count - 1
End With
a = 1
For i = 22 To lrow2 'Ab dort werden die Werte eingetragen
If .Cells(i, 1).Value  Empty Then
UserForm.Controls("TextBox" & a).Value = .Cells(i, 1).Value
Else
UserForm.Controls("ComboBox" & a).Visible = False
UserForm.Controls("TextBox" & a).Visible = False
End If
a = a + 1
If a > 7 Then Exit For
Next i
End With
UserForm.Show
End Sub

Anzeige
AW: Userform Checkbox ein/ausblenden
22.07.2013 07:14:18
kultnoob
Guten Morgen,
ES FUNKTIONIERT!!!! Vielen Dank.
Gut, wenn ich Sachen in eine Textbox/oä einlesen möchte, dann muss ich zuerst alles durchgehen und dann die Userform anzeigen lassen. Interessant und gespeichert. Ich bin mal so frei und stelle eine Frage.
Den Code an sich verstehe ich bis auf die Zeile:

With UsedRange
lrow2 = .row + .rows.count -1
Mit lrow2 definiere ich bei mir die letzte genutzte Zeile. Standardmäßig mit dem Befehl:
lrow2 = Sheets(2).UsedRange.Rows.Count
Ahhh, im Grunde ist es das Gleiche wie ich nutze. Du benutzt ein With mit UsedRange und beziehst Dich dann wie ich auf die letzte genutzte Zeile. Aber warum dann nochmal + eine Zeile?
MfG

AW: Userform Checkbox ein/ausblenden
22.07.2013 11:11:49
fcs
Hallöchen,
deine Lösung liefert nur dann die korrekte Zeile, wenn in Zeile 1 Daten/Formatierungen stehen.
Sind eine oder mehrere Zeilen am Beginn der Tabelle nicht benutzt, dann liefert
lRow2 = .UsedRange.Rows.Count
nicht die Nummer der letzten benutzten Zeile, sondern eine entsprechend niedrigere Nummer.
Dieses Problem umgeht meine Lösung.
Die Start-/Auswahlwerte für Steuerelemente eines Userforms kann man übrigens auch im Code des Userforms in der Ereignisprozedur
Private Sub UserForm_Initialize()
End Sub

setzen.
Gruß
Franz

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige