Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1448to1452
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
CheckBox zur Laufzeit einlesen
23.09.2015 13:21:27
Dirk
Hallo xlGurus,
Bei Änderungen in Spalte H öffnet sich ein UserForm mit CheckBoxen.
CheckBox.Caption wird über eine Liste mit dem Namen "Suche" gesteuert.
Lässt sich dieser Name auch im VBA-Code benutzen (siehe: Private Sub UserForm_Initialize ) ?
Die CheckBox.Caption soll als Suchbegriff für TeilString in Spalte K genutzt werden.
Gesucht wird allerdings nicht in der gesamten Spalte K, sondern nur in der jeweiligen Zeile.
Soweit habe ich mich schon laienhaft vorgearbeitet - das "Einlesen" in die CheckBoxen scheint zu funktionieren.
Doch nun komme ich absolut nicht weiter. Selbst nach stundenlanger Recherche hier im Archiv drehe ich mich nur noch im Kreise.
Aber vllt. mache ich schon hier gravierende Fehler ?
Mein Ziel ist:
Durch An- od. Abwahl einer CheckBox soll der hinterlegte Begriff in K erscheinen od. verschwinden.
Jeder Begriff darf nach der Bearbeitung nur noch einmal vorkommen, wobei die Reihenfolge in der Zelle nicht interessant ist.
Ich freue mich auf Eure Hilfe.
Gruss
Dirk
P.S.: aktueller Bearbeitungsstand
https://www.herber.de/bbs/user/100339.xlsm

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CheckBox zur Laufzeit einlesen
23.09.2015 13:56:19
daniel
Hi
der gravierenste Fehler ist, dass du hier einen unpassenden Steuerelementtyp verwendest.
Nimm statt der vielen Checkboxen EINE Listbox im Multiselekt-Modus und alles wird viel einfacher und kürzer
Gruß Daniel

AW: CheckBox zur Laufzeit einlesen
23.09.2015 14:10:00
Dirk
Hallo Daniel,
bin leider nicht so fit in Excel.
Hättest du dazu vllt. ein kleines Beispiel in Anlehnung an die Mappenstruktur ?
Listbox im Multiselekt-Modus klingt interessant, aber auch kompliziert...
Anscheinend habe ich mal wieder den falschen Ansatz verfolgt u. mich verrannt.
Vielen Dank also schonmal für deinen fachkundigen Tipp.
Gruss
Dirk

Anzeige
AW: CheckBox zur Laufzeit einlesen
23.09.2015 14:47:38
daniel
Hi
lösche in der Userform alle Checkboxen und erstelle stattdessen eine Listbox (Listbox1)
mache für diese Listbox folgende Einstellungen in der Eigenschaftsliste:
- RowSource: Suche (das ist der Name, den du für den Quellzellbereich verwendet hast)
- MultiSelect: 1-fmMultiselectMulti oder 2-fmMultiSelectExtended
- ListStyle: 1-fmListStyleOption (optional, dann sieht die Listbox aus wie Checkboxen)
schreibe folgenden Code ins Modul der Listbox (alles andere kannst du löschen)
Option Explicit
Private Sub CommandButton1_Click()
Dim txt As String
Dim i As Long
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then txt = txt & ListBox1.List(i)
Next
Cells(ActiveCell.Row, "K").Value = txt
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim txt As String
Dim i As Long
txt = Cells(ActiveCell.Row, "K").Value
For i = 0 To ListBox1.ListCount - 1
ListBox1.Selected(i) = txt Like "*" & ListBox1.List(i) & "*"
Next
End Sub
wenn die Listbox aktiviert wird, dann überprüft der Code welche Elemente der Listbox in der Zelle in Spalte K vorkommen und setzt entsprechend die Häkchen.
bei KLick auf den Button wird dann der Zelltext der zelle in Spalte K entsprechend der gesetzen Häkchen geändert.
Gruß Daniel

Anzeige
AW: CheckBox zur Laufzeit einlesen
23.09.2015 15:27:35
Dirk
Hallo Daniel,
jetzt bin ich total deprimiert.
Frag' nicht, wieviele Stunden ich schon über diesem Problem grübele...
Und nun kommst Du und schüttelst so im Vorbeigehen eine Lösung aus dem Ärmel, die mir besser gefällt als ich es mir vorstellte.
Einfach PERFEKT !
Ich danke Dir vielmals, auch für die Hilfestellung zum "Einbau" in meine Mappe.
Wenn Du kein xl-Dozent bist, dann solltest Du mal über einen Berufswechsel nachdenken. ;-)
Ich wünsche Dir u. allen anderen hier ein schönes Wochen-Bergfest.
Bis bald mal wieder.
Dirk

Anzeige
AW: CheckBox zur Laufzeit einlesen
24.09.2015 15:24:21
Dirk
Hallo nochmal,
nun tut sich allerdings ein neues Problem auf.
In der Spalte K können auch Begriffe stehen, die nicht in der Namensliste "Suche" vorkommen.
Jetzt werden diese nach Änderungen in der ListBox gelöscht, was nicht passieren passieren darf...
Kann mir nochmal jemand helfen ?
Gruss
Dirk

AW: CheckBox zur Laufzeit einlesen
24.09.2015 16:01:16
Daniel
Hi
vielleicht so (ohne das jetzt nochmal zu testen):
Private Sub CommandButton1_Click()
Dim txt As String
Dim i As Long
txt = Cells(ActiveCell.Row, "K").Value
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
if Instr(txt, Listbox1).list(i)) = 0 then txt = txt & ListBox1.List(i)
else
txt = replace(txt, Listbox1.List(i), "")
end if
Next
Cells(ActiveCell.Row, "K").Value = txt
Unload Me
End Sub
Gruß Daniel

Anzeige
AW: CheckBox zur Laufzeit einlesen
24.09.2015 16:26:39
Dirk
Hallo Daniel,
leider kann ich diesen Code nicht einfügen:
if Instr(txt, Listbox1).list(i)) = 0 then txt = txt & ListBox1.List(i)
wird rot markiert mit der Fehlermeldung: "Erwartet Then oder GoTo"
Schaust du bitte nochmal drauf ?
Vielen Dank.
Gruss
Dirk

AW: CheckBox zur Laufzeit einlesen
24.09.2015 22:21:09
Daniel
Hi
da hast du ein Klammer-zu zuviel drin.
Gruss Daniel

ListBox-Multiselect
25.09.2015 02:54:45
Dirk
Hallo Daniel,
manchmal sehe ich wohl echt den Wald vor lauter Bäumen nicht - das hätte ich selber merken müssen...
Nun läuft's rund - Dank Deiner Hilfe.
Abschließend noch eine Frage:
In der Liste "Suche", die der ListBox1 zugrunde liegt (Source), können auch leere Zellen sein. Diese bewirken dann in der ListBox ein angehaktes Kontrollkästchen ohne jeglichen Text dahinter.
Wie kann man diese Leerzeilen unterdrücken?
Gruss
Dirk
zum Testen: Halbfinal-Stand

Anzeige
AW: ListBox-Multiselect
25.09.2015 13:05:32
Daniel
Hi
dann musst du die Eigenschaft RowSource weglassen und eine Schleife über die entsprechenden Zellen programmieren, welche im Initialize-Event die Werte per .AddItem zur Listbox hinzufügt, dh in etwa so
for each Zelle in Sheets("Quelle").range("AI6:AI14)
if Zelle.Value  "" then Listbox1.AddItem Zelle.Value
next
gruß Daniel

AW: ListBox-Multiselect
25.09.2015 19:20:40
Dirk
Hallo Daniel,
natürlich ist Dein Tipp mal wieder total richtig, aber ich stosse da an meine Grenzen.
Damit sind zwar die Leerzeilen weg, doch das zieht nun auch einen Rattenschwanz an Änderungen nach sich, die ich allein nicht gestemmt kriege...
(Einlesen der Werte aus K - fehlende Haken, Vergleich mit K beim Einlesen u. vor dem Zurückschreiben etc.)
Somit würde ich wieder ganz am Anfang stehen.
Da lasse ich mal lieber die Finger von u. lebe lieber mit diesem kl. Schönheitsfehler.
Diese Leerzeilen lassen sich optisch auch als "Trennlinie/Abgrenzung" für unterschiedliche "Wertegruppen" benutzen.
Abschließend also besten Dank für Deine Hilfe u. Engelsgeduld bei meinen Nachfragen !
Dir u. allen anderen hier im Forum wünsche ich ein schönes WE.
MfG
Dirk

Anzeige
oT
24.09.2015 18:05:00
Dirk
sorry, noch offen...

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige