29.01.2016, 11:23
Seiten: 1 2
29.01.2016, 12:05
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:
dann hinter der Userform folgende Passagen ersetzen:
Damit die erste Zeile auch ausgewählt werden kann, bei ListBox1_DblClick das machen, was ich schon gestern schrieb.
Das " =" mit "<" ersetzen.
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.
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.
29.01.2016, 13:40
Danke sehr - werde es mal probieren
VG Uwe
VG Uwe
29.01.2016, 15:13
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.
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.
29.01.2016, 22:55
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]
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]
30.01.2016, 00:50
Hallo Uwe,
hab' noch einige Ungereimtheiten gefunden, deshalb eine erweiterte Version:
[attachment=4009]
hab' noch einige Ungereimtheiten gefunden, deshalb eine erweiterte Version:
[attachment=4009]
Seiten: 1 2