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

Durch Checkbox soll Listbox gefüllt werden

Durch Checkbox soll Listbox gefüllt werden
04.07.2019 14:11:17
Sören

Hallo Leute,
ich habe mal wieder ein größeres Problem. Ich möchte gerne eine Suchfunktion basteln die über eine Checkbox bestimmte werte in eine Listbox ausgibt. Also wenn man die Checkbox anklickt und auf Suche klickt, sollen alle Beziehungen aus Spalte 1 in Excel (Datenbank) angezeigt werden, die wie folgt aussehen:
X - x
x - xx
x - xxx
xx - xx
xx - xxx
xxx - xxx
Meine aktuelle Suchfunktion ist wie folgt aufgebaut. Es Gibt eine Textbox1. In dieser Wird eine Zahl eingetragen (Spalte 1 in Excel beinhaltet nur zahlen oder eben diese Kombination) und , wenn man auf Suche klickt wird die zahl in der Listbox angegeben. Per Klick auf die Zahl in der Listbox erfolgt denn der nächste Schritt, dass die TextBoxen in der Maske mit den Daten ausgefüllt werden. Durch die Checkbox wird die TextBox1 deaktiviert und dann sollte eig. der neue Code zum tragen kommen. Dabei ist es wichtig, dass durch das aktivieren der Checkbox und dem anschließenden klick auf Suche alle Kombinationen in der Listbox angezeigt werden.
Ich hoffe mir kann einer helfen. Ist der letztere Größe Punkt in meinem Tool den ich bestreiten muss.
Gruß Sören

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

Betreff
Datum
Anwender
Anzeige
AW: Durch Checkbox soll Listbox gefüllt werden
04.07.2019 16:56:31
Hajo_Zi
Hallo Sören,
benutze Autofilter, es soll ja in Tabelle angezeigt werden.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: Durch Checkbox soll Listbox gefüllt werden
04.07.2019 22:44:32
Werner
Hallo Sören,
z.B. so:
Private Sub CheckBox1_Click()
If Me.CheckBox1 Then
Me.TextBox1.Enabled = False
Me.ListBox1.Clear
Else
Me.TextBox1.Enabled = True
Me.ListBox1.Clear
End If
End Sub
Private Sub CommandButton1_Click()
Dim i As Long
With Worksheets("Tabelle1")
If Me.CheckBox1 Then
For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row
If InStr(.Cells(i, "A"), "-") > 0 Then
Me.ListBox1.AddItem .Cells(i, "A")
End If
Next i
Else
MsgBox "Hier Code zum Einlesen der Zahlen in die Listbox."
End If
End With
End Sub
Gruß Werner
Anzeige
AW: Durch Checkbox soll Listbox gefüllt werden
06.07.2019 17:50:07
Sören
Hallo Werner,
Danke für den Code. Leider verstehe ich den unteren Teil nicht ganz. Nach else kommt ne Msgbox. und da steht Inhalt Listbox einfügen. Das habe ich jetzt mal gemacht. aber leider wird mir die Listbox leer angezeigt. Hier der Code:
Private Sub CommandButton1_Click()
Dim i As Long
With ActiveSheet
ListBox1.Clear
If Me.CheckBox1 Then
For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row
If InStr(.Cells(i, "A"), "-") > 0 Then
Me.ListBox1.AddItem .Cells(i, "A")
End If
Next i
Else
If Not (IsNumeric(Application.Match(rng.Row, vtmp, 0))) Then
ReDim Preserve vtmp(UBound(vtmp) + 1)
vtmp(UBound(vtmp)) = rng.Row
ListBox1.AddItem .Cells(rng.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(rng.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(rng.Row, 6)
ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(rng.Row, 12)
End If
End If
End With
End Sub
Leider finde ich den Fehler nicht.
Gruß Sören
Anzeige
AW: Durch Checkbox soll Listbox gefüllt werden
07.07.2019 15:18:38
Werner
Hallo Sören,
wie sieht denn dein seitheriger Code (der komplette Code) zum Befüllen der Listbox aus?
Besser mal die Datei hier hochladen.
Gruß Werner
AW: Durch Checkbox soll Listbox gefüllt werden
07.07.2019 18:34:03
Sören
Hallo Werner,
habe mein Tool anabgespeckter Version hochgeladen. Da es sonst die Max. größe deutlich überschritten hätte.
https://www.herber.de/bbs/user/130772.xlsm
Ganz kurz nochmal zum Problem. Wenn ich die Checkox2 auswähle und die TextBox daneben gesperrt wird, dann sollte unter dem Button Suche in der Listbox alle Varianten angezeigt werden, also von x-x bis xxx-xxx. Ist die Checkbox2 nicht angeklickt, kann man in der TextBox Zahlen eingeben die unter dem Button Suchen gesucht und ggf. in der Listbox angezeigt werden. Hoffe du kannst mir helfen. bin total am verzweifeln damit.
Gruß Sören
Anzeige
AW: Durch Checkbox soll Listbox gefüllt werden
08.07.2019 14:31:46
Werner
Hallo Sören,
na ja, du kannst ja nicht erwarten dass das läuft, wenn du nur einen Teil deines ursprünglichen Codes übernimmts.
Private Sub Suchen_Click()
Dim rng As Range, strFirst As String
Dim vtmp() As Long, i As Long
If Me.CheckBox2 Then
Me.StationSuche.Enabled = False
Me.ListBox1.Clear
For i = 14 To Cells(Rows.Count, "A").End(xlUp).Row
If InStr(Cells(i, "A"), "-") > 0 Then
Me.ListBox1.AddItem Cells(i, "A")
Me.ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(i, 1)
Me.ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(i, 5)
Me.ListBox1.List(ListBox1.ListCount - 1, 3) = Cells(i, 10)
Me.ListBox1.List(ListBox1.ListCount - 1, 4) = i
End If
Next i
Else
Me.StationSuche.Enabled = True
Me.ListBox1.Clear
If Len(Trim(StationSuche)) = 0 Then
MsgBox "Bitte geben Sie eine gültige Station ein!", vbCritical + vbOKOnly, " _
Eingabefehler!"
Me.StationSuche.SetFocus
Exit Sub
End If
ReDim vtmp(0)
ListBox1.Clear
Set rng = Range("A:C").Find(What:=StationSuche, Lookat:=xlWhole)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Not (IsNumeric(Application.Match(rng.Row, vtmp, 0))) Then
ReDim Preserve vtmp(UBound(vtmp) + 1)
vtmp(UBound(vtmp)) = rng.Row
ListBox1.AddItem Cells(rng.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(rng.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(rng.Row, 5)
ListBox1.List(ListBox1.ListCount - 1, 3) = Cells(rng.Row, 10)
ListBox1.List(ListBox1.ListCount - 1, 4) = rng.Row
End If
Set rng = Range("A:C").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  strFirst
End If
End If
If ListBox1.ListCount > 0 Then
ListBox1.ListIndex = 0
Else
MsgBox "Bitte geben Sie eine gültige Station ein!", vbExclamation
StationSuche = ""
End If
Set rng = Nothing
End Sub
Im Listbox_Click wurde auch eine kleine Änderung nötig.
Private Sub ListBox1_Click()
Dim intC As Integer, lngR As Long, ausg As Integer
With ListBox1
If .ListCount = 0 Then Exit Sub
If .List(.ListIndex, 0) = "" Then Exit Sub
lngR = CLng(.List(.ListIndex, 4))
zeile = lngR
End With
Me.StationStart.Value = Cells(zeile, 1)
Me.Endgeraeteanzahl.Value = Cells(zeile, 3)
Me.Endgeraet.Value = Cells(zeile, 5)
Me.PosFeldbezeichnung.Value = Cells(zeile, 10)
Me.Ausgabetext.Value = Cells(zeile, 12)
Me.Bemerkungen.Value = Cells(zeile, 16)
If Not Me.CheckBox2 Then
StationSuche.SetFocus
End If
End Sub
Gruß Werner
Anzeige
AW: Durch Checkbox soll Listbox gefüllt werden
08.07.2019 16:00:42
Sören
Hallo Werner,
Vielen vielen Dank. Schon wieder hast du mir sehr gut und schnell geholfen. Bin immer wieder erstaunt, wie du das schafft.
Leider sind bei mir noch 2 Fragen aufgetreten.
1. Wenn ich nach Daten suche in der Listbox werden mir nur die ersten drei angezeigt. Egal bei welcher von den beiden Suchmöglichkeiten. Wenn ich denn nach unten scrollen will, tut er es einfach nicht. Gibt es da nen Bottun das er es macht. Habe schon unter Eigenschaften versucht es umzustellen, aber ohne Erfolg.
2. Kann man die Ausgabe der Listbox so anpassen, dass bei einzelnen Station die Daten in der TextBox StationStart angezeigt werden und wenn über die Checkbox gesucht wird, die Daten in StationStart1 angezeigt werden und sich somit der Hacken in der Checkbox 1 ändert?
Sry für die vielen Fragen.
Gruß Sören
Anzeige
AW: Durch Checkbox soll Listbox gefüllt werden
08.07.2019 17:12:22
Werner
Hallo Sören,
Private Sub Suchen_Click()
Dim rng As Range, strFirst As String
Dim vtmp() As Long, i As Long
If Me.CheckBox2 Then
Me.StationSuche.Enabled = False
For i = 14 To Cells(Rows.Count, "A").End(xlUp).Row
If InStr(Cells(i, "A"), "-") > 0 Then
Me.ListBox1.AddItem Cells(i, "A")
Me.ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(i, 1)
Me.ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(i, 5)
Me.ListBox1.List(ListBox1.ListCount - 1, 3) = Cells(i, 10)
Me.ListBox1.List(ListBox1.ListCount - 1, 4) = i
End If
Next i
Else
Me.StationSuche.Enabled = True
If Len(Trim(StationSuche)) = 0 Then
MsgBox "Bitte geben Sie eine gültige Station ein!", vbCritical + vbOKOnly, " _
Eingabefehler!"
Me.StationSuche.SetFocus
Exit Sub
End If
ReDim vtmp(0)
ListBox1.Clear
Set rng = Range("A:C").Find(What:=StationSuche, Lookat:=xlWhole)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Not (IsNumeric(Application.Match(rng.Row, vtmp, 0))) Then
ReDim Preserve vtmp(UBound(vtmp) + 1)
vtmp(UBound(vtmp)) = rng.Row
ListBox1.AddItem Cells(rng.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(rng.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(rng.Row, 5)
ListBox1.List(ListBox1.ListCount - 1, 3) = Cells(rng.Row, 10)
ListBox1.List(ListBox1.ListCount - 1, 4) = rng.Row
End If
Set rng = Range("A:C").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  strFirst
End If
End If
If ListBox1.ListCount > 0 Then
ListBox1.ListIndex = 0
Else
MsgBox "Bitte geben Sie eine gültige Station ein!", vbExclamation
StationSuche = ""
End If
Set rng = Nothing
End Sub

Private Sub ListBox1_Click()
Dim zeile As Long
With ListBox1
If .ListCount = 0 Then Exit Sub
If .List(.ListIndex, 0) = "" Then Exit Sub
zeile = CLng(.List(.ListIndex, 4))
End With
If Me.CheckBox2 Then
Me.StationStart1.Value = Cells(zeile, 1)
Else
Me.StationStart.Value = Cells(zeile, 1)
End If
Me.Endgeraeteanzahl.Value = Cells(zeile, 3)
Me.Endgeraet.Value = Cells(zeile, 5)
Me.PosFeldbezeichnung.Value = Cells(zeile, 10)
Me.Ausgabetext.Value = Cells(zeile, 12)
Me.Bemerkungen.Value = Cells(zeile, 16)
If Not Me.CheckBox2 Then
Me.StationSuche.SetFocus
End If
End Sub

Private Sub CheckBox2_Click()
'Checkbox prüft, welche ob Station mehrer zur Auswahl stehen
Me.ListBox1.Clear
Me.CheckBox1 = False
Me.StationStart = ""
Me.StationStart1 = ""
Me.Endgeraet = ""
Me.Endgeraeteanzahl = ""
Me.PosFeldbezeichnung = ""
Me.Ausgabetext = ""
Me.Bemerkungen = ""
If Me.CheckBox2 Then
Me.StationSuche.Enabled = False
Me.StationSuche.BackColor = &H80000015
Me.StationSuche.ForeColor = &H80000008
Me.StationSuche = ""
Me.ListBox1.Clear
Else
Me.StationSuche.Enabled = True
Me.StationSuche.BackColor = vbWhite
Me.StationSuche.SetFocus
Me.StationSuche.ForeColor = &H80000008
Me.ListBox1.Clear
End If
End Sub
Zu deiner Listbox: Lösch die einfach und leg eine neue an.
Gruß Werner
Anzeige
AW: Durch Checkbox soll Listbox gefüllt werden
08.07.2019 18:37:44
Sören
Hallo Werner,
Vielen Dank. klappt. Und auch das löschen und neu anlegen der Listbox führte auch zum Erfolg.
habe jetzt zu deinem Code noch bei der Listbox für die Checkbox2 die Aktivierung der Checkbox1 auf true Gesetzt.
If Me.CheckBox2 Then
Me.StationStart1.Value = Cells(zeile, 1)
Me.CheckBox1 = True
Else
Me.StationStart.Value = Cells(zeile, 1)
End If
Leider erfolgt hier der Fehler (auch ohne dem Code zur Aktivierung der Checkbox1), dass wenn die Checkbox 2 aktiviert wird, er die Stationsdaten in beide TextBoxen darstellt. Habe versucht über
StationStart = "" das zu löschen aber ohne Erfolg. Gibt es da einen anderen weg noch?
Gruß Sören
Anzeige
AW: Durch Checkbox soll Listbox gefüllt werden
08.07.2019 19:01:05
Sören
Hallo Werner,
sry. ich habe gerade noch einen weitern Fehler Gefunden, der im Zusammenhang mit dem einfügen des neuen Codes gekommen ist. Wenn ich ganz normal in der Suche nach einer Station suche und die Daten dann ändere und speichere ist alles gut. Wenn ich aber über die Checkbox nach den Stationen xx-xx etc. suche, die mir angezeigt werden und ich auf speichern klicke, kommt der Laufzeitfehler 2110.
Fokus kann nicht auf das Steuerelement gesetzt werden. Es ist unsichtbar, nicht aktiviert oder von einem Typ, der keinen Fokus akzeptiert.
Die Daten werden aber trozdem geändert bzw. gespeichert. Stehe da auf nem schlauch.
Gruß Sören
Anzeige
AW: Durch Checkbox soll Listbox gefüllt werden
09.07.2019 07:05:43
Werner
Hallo Sören,
dann lad doch bitte die Mappe nochmal hoch mit dem Code, so wie du ihn jetzt in Benutzung hast.
Ich habe keine Ahnung wo du jetzt was Codemäßig stehen hast.
Gruß Werner
AW: Durch Checkbox soll Listbox gefüllt werden
13.07.2019 19:59:45
Sören
Hallo Werner,
tut mir leid für die späte Antwort. Bin gerade aus nem kurz Urlaub zurück. Leider bekomme ich die Datei nicht hochgeladen. Deswegen wollte ich dir den Code zeigen, weshlab die Fehlermeldung 2110 kommt. Vielleicht erkennst du daran, weshalb die Fehlermeldung kommt.
Private Sub Suchen_Click()
Dim rng As Range, strFirst As String
Dim vtmp() As Long, i As Long
If Me.CheckBox2 Then
Me.StationSuche.Enabled = False
Me.ListBox1.Clear
For i = 25 To Cells(Rows.Count, "A").End(xlUp).Row
If InStr(Cells(i, "A"), "-") > 0 Then
Me.ListBox1.AddItem Cells(i, "A")
Me.ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(i, 1)
Me.ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(i, 6)
Me.ListBox1.List(ListBox1.ListCount - 1, 3) = Cells(i, 12)
Me.ListBox1.List(ListBox1.ListCount - 1, 4) = i
End If
Next i
Else
Me.StationSuche.Enabled = True
Me.ListBox1.Clear
If Len(Trim(StationSuche)) = 0 Then
MsgBox "Bitte geben Sie eine Station ein!", vbCritical + vbOKOnly, " Eingabefehler!"
StationSuche = ""
ListBox1.Clear
StationStart = ""
CheckBox1 = False
CheckBox2 = False
Endgeraet = ""
Endgeraeteanzahl = ""
Stationsseite = ""
StationSuche.SetFocus
Exit Sub
End If
ReDim vtmp(0)
With ActiveSheet
ListBox1.Clear
Set rng = .Range("A:C").Find(What:=StationSuche, Lookat:=xlWhole)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
If Not (IsNumeric(Application.Match(rng.Row, vtmp, 0))) Then
ReDim Preserve vtmp(UBound(vtmp) + 1)
vtmp(UBound(vtmp)) = rng.Row
ListBox1.AddItem .Cells(rng.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(rng.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(rng.Row, 6)
ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(rng.Row, 12)
ListBox1.List(ListBox1.ListCount - 1, 4) = rng.Row
End If
Set rng = .Range("A:C").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  strFirst
End If
End With
End If
If ListBox1.ListCount > 0 Then
ListBox1.ListIndex = 0
Else
MsgBox "Die gesuchte Station " & StationSuche.Value & vbCrLf & "wurde nicht gefunden!",  _
vbExclamation + vbOKOnly, "Suchassistent!"
StationSuche = ""
ListBox1.Clear
StationStart = ""
CheckBox1 = False
CheckBox2 = False
Endgeraet = ""
Endgeraeteanzahl = ""
Stationsseite = ""
StationSuche.SetFocus
End If
Set rng = Nothing
End Sub

Private Sub UserForm_Activate()
StationSuche.SetFocus
With ListBox1
.ColumnCount = 5
.ColumnWidths = "1,6cm;0,1cm;4,5cm"
End With
End Sub

Private Sub ListBox1_Click()
Dim intC As Integer, lngR As Long, ausg As Integer
With ListBox1
If .ListCount = 0 Then Exit Sub
If .List(.ListIndex, 0) = "" Then Exit Sub
lngR = CLng(.List(.ListIndex, 4))
zeile = lngR
End With
If Me.CheckBox2 Then
Me.StationStart1.Value = Cells(zeile, 1)
Me.CheckBox1 = True
Else
Me.StationStart.Value = Cells(zeile, 1)
End If
Me.Endgeraet.Value = Cells(zeile, 6)
Me.Endgeraeteanzahl.Value = Cells(zeile, 10)
Me.Stationsseite.Value = Cells(zeile, 12)
If Not Me.CheckBox2 Then
StationSuche.SetFocus
End If
End Sub
Gruß Sören
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige