Clever-Excel-Forum

Normale Version: Benötige Hilfe bei Listbox
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
danke.

Habe mal die Änderungen eingefügt. Leider kann ich die Listbox nicht fiiltern.
Hallo Uwe,

snb Vorschlag kann Dein akutes Problem nicht lösen.
Er zeigt Dir nur, wie man eine Listbox oder Combobox einfach und schnell füllen kann.
Um seinen Vorschlag bei Dir anwenden zu können, musst Du an etlichen Stellen Änderungen vornehmen bzw müssen Codes anders arbeiten.

Deine akutes Problem konnte ich wie folgt bedingt lösen:

1. Im Modul eins den Code mit folgendem ersetzen:


Code:
Public Sub Array_fuellen()

Dim lLetzte   As Long
Dim lZeile    As Long
Dim lIndex    As Long
Dim iSpalte   As Integer

  With Worksheets("Zulassungen")
     lLetzte = .Cells(Rows.Count, 1).End(xlUp).Row
     For lZeile = 2 To lLetzte   'es wird ab Zeile 2 eingelesen; Überschriften werden nicht eingelesen, weil das bei Filterung auch nicht der Fall ist
         lIndex = lIndex + 1
         ReDim Preserve aTmp(1 To 14, 1 To lIndex)
         For iSpalte = 1 To 13
              aTmp(iSpalte, lIndex) = .Cells(lZeile, iSpalte).Text
              aTmp(14, lIndex) = lZeile
           Next iSpalte
        Next lZeile
  End With
 
End Sub

dann hinter der Userform folgende Passagen ersetzen:


Code:
Private Function Array_Prüfen(ByVal txt As Control, ByVal Spalte As Integer) As Variant
Dim i As Long, j As Long
Dim r As Long
Dim arr() As Variant
Dim y As Boolean

For i = LBound(arrTmp) To UBound(arrTmp)
   If LCase(arrTmp(i, Spalte)) Like "*" & LCase(txt.Text) & "*" Then
       ReDim Preserve arrT(0 To 13, 0 To r)    'hier die Zahl 13 statt bisher 12
       ReDim Preserve arr(1 To 13, 1 To r + 1)
       y = True
       For j = 0 To 12
           arrT(j, r) = arrTmp(i, j + 1)
           arr(j + 1, r + 1) = arrTmp(i, j + 1)
       Next j
       arrT(j, r) = i    'hier ist diese Zeile hinzu gekommen
       r = r + 1
   End If
Next i

If y Then
   Erase arrTmp
   arrTmp = WorksheetFunction.Transpose(arr)
   ListBox1.Clear
   If UBound(arrT, 2) = 0 Then
       ReDim arr(0, 12)
       For i = 0 To 12
           arr(0, i) = arrT(i, 0)
       Next i
       ListBox1.List = arr
   Else
       Array_Prüfen = WorksheetFunction.Transpose(arrT)
   End If
Else
   MsgBox "Keine passenden Daten zu den Kriterien gefunden !"
   txt.Text = ""
   txt.SetFocus
   Array_Prüfen = ListBox1.List
End If
End Function


Damit die erste Zeile auch ausgewählt werden kann, bei ListBox1_DblClick das machen, was ich schon gestern schrieb.

Das " =" mit "<" ersetzen.


Code:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
   If Me.ListBox1.ListIndex < 0 Then 'Hier wurde "=" mit "<" ersetzt
      Cancel = True
      Exit Sub
   End If


In den Codes habe ich die angepassten stellen kommentiert.

Noch ein allgemeiner Hinweis.
Im Code ist oft On Error Resume Next eingebaut, womit alle Fehler ignoriert werden.
Das ist nicht gut durchdacht. Man sollte im Code auf eventuelle Fehler reagieren.

Ich kann nicht sagen, ob Du an anderen Stellen noch mit Problemen zu kämpfen haben wirst.
Wenn es noch mehr Probleme auftauchen, dann würde ich das neu Aufbauen. Denn manche Dinge gehen einfacher, so wie es auch snb gezeigt hat, und Fehlermöglichkeiten sollten im Code berücksichtigt und behandelt werden.
Danke sehr  - werde es mal probieren

VG Uwe
Hallo Uwe,

ich glaube, dass es auch so nicht richtig funktionieren wird.
Es kommt unter anderen Bedingungen zu erneuten Fehlern.

Kannst Du mir verraten, wer das Ganze programmiert hat?
Hast Du Code von einem oder mehreren anderen Projekt versucht auf Deine Bedürfnisse anzupassen?

Ich verstehe nicht, warum einmal Bereiche mittels Array eingelesen werden dann wieder über Zelladressierung.
Es kann auch nicht funktionieren, dass man Rowssource bei den Comboboxen vorbelegt und dann über List Eigenschaft die Boxen versucht neu zu füllen.
Darum ist überall die Fehlerbehandlung abgeschaltet.

Fazit:
Es muss grundsätzlich neu Aufgebaut werden.
Wenn ich Zeit finde (kein Versprechen) schaue ich mal ob ich es einigermaßen zusammenschustern kann.

Noch eine Sache, die Textboxen auf der Suchseite machen eigentlich keinen Sinn. Wenn mehrere Treffer gefunden wurden, was soll dann in die Textboxe.
Man kann zwar, so wie jetzt die Erste Zeile einlesen, aber wofür? Ich würde auf diese verzichten.
Hallo Uwe,

ich habe einige Anpassungen vorgenommen, und es sollte jetzt einigermaßen vernünftig funktionieren.
Dabei habe ich bemerkt, dass die Textboxen auch zur Suche gehören und benötigt werden.

Anbei Deine Datei mit Anpassungen im Code und im Namensmanager.
Die definierten Namen sind jetzt dynamisch.

[attachment=4008]
Hallo Uwe,

hab' noch einige Ungereimtheiten gefunden, deshalb eine erweiterte Version:

[attachment=4009]
Seiten: 1 2