hallo Forum.
Ich habe hier schon sehr viel Hilfe erfahren speziell auch von Nepumuk. An dieser Stelle möchte ich euch erst einmal danke sagen.
Aktuell plagt mich mal wieder ein Problem welches ich irgend wie noch nicht lösen kann. Folgende Situation:
Ich öffne eine Userform mit
'Datenbank_2.Show vbModeless
'Datenbank_1.Hide
~f~
In dieser Datenbank_2 gibt es u.a. eine Listbox die ich mit 5 Spalten und verschiedenen Breiten einrichte.
Diese Listbox befülle ich mit einem Array so.
~f~
'If stg_kz = "x" Then
' 'es ist kein Datensatz in der Datenbank_2 vorhanden
' Call Standardmeldung_v2
' stg_kz = ""
'Else
' anz_datensätze = wks.UsedRange.Rows.Count
' zeile_arr = Application.WorksheetFunction.CountA(wks.Range(wks.Cells(1, 1), wks.Cells(anz_datensätze, 1)))
' anz_ebenen = zeile_arr
' ReDim ArrEbene(zeile_arr, 5)
' zeile_arr = 0
' For zeile = 1 To anz_ebenen
' ArrEbene(zeile_arr, 0) = wks.Cells(zeile, 1).Value
' ArrEbene(zeile_arr, 1) = wks.Cells(zeile, 2).Value
' ArrEbene(zeile_arr, 2) = wks.Cells(zeile, 3).Value
' ArrEbene(zeile_arr, 3) = wks.Cells(zeile, 4).Value
' ArrEbene(zeile_arr, 4) = wks.Cells(zeile, 5).Value
' zeile_arr = zeile_arr + 1
' Next zeile
' zeile_arr = zeile_arr - 1
' .ListBox_Auswahl_Ebenen.List() = ArrEbene
'End If
~f~
Das klappt auch so weit.
Dann klicke ich einen der Datensätze in der Listbox an um diesen weiter zuverarbeiten. Und genau hier ist das Problem.
Der angeklickte Datensatz liefert mir eine ID, die in der Spalte 3 der Listbox steht. So mache ich das.
~f~
'Private Sub ListBox_Auswahl_Ebenen_Click()
''die angeklickte Ebene merken
'With Fahrzeugdatenbank
'.ListBox_Auswahl_Ebenen.TextColumn = 1
'suchbegriff_eb_1 = ListBox_Auswahl_Ebenen.Text
'.ListBox_Auswahl_Ebenen.TextColumn = 2
'suchbegriff_eb_2 = ListBox_Auswahl_Ebenen.Text
'.ListBox_Auswahl_Ebenen.TextColumn = 3
'suchbegriff_eb_3 = ListBox_Auswahl_Ebenen.Text
'.ListBox_Auswahl_Ebenen.TextColumn = 4
'suchbegriff_eb_4 = ListBox_Auswahl_Ebenen.Text
'.ListBox_Auswahl_Ebenen.TextColumn = 5
'suchbegriff_eb_5 = ListBox_Auswahl_Ebenen.Text
''die Listbox Ebenen löschen
'.ListBox_Auswahl_Ebenen.Clear
~f~
Dann lösch ich die Listbox wieder, hole mir anhand der gemerkten ID (suchbegriff_3) neue Daten in das gleiche Array und will dieses Array dann wieder in die gleiche Listbox einspiele. so mache ich das:
~f~
'Set treffer = Sheets("EB").Columns(temp_spalte_eb).Find(suchbegriff_eb_3, lookat:=xlWhole)
'If Not treffer Is Nothing Then
'Set wks = Sheets("EB")
'With wks
'suchbegriff_3 = Datenbank_2.lb_Knotenname_Auswahl.Caption
'anz_datensätze = .UsedRange.Rows.Count
'zeile_arr = Application.WorksheetFunction.CountIf(.Range(.Cells(1, temp_spalte_eb), .Cells(anz_datensätze, temp_spalte_eb)), suchbegriff_3)
'anz_ebenen = zeile_arr
'ReDim ArrEbene(zeile_arr, 5)
'zeile_arr = 0
'For zeile = 1 To anz_ebenen
'If .Cells(zeile, temp_spalte_eb).Value = suchbegriff_3 Then
' ArrEbene(zeile_arr, 0) = .Cells(zeile, temp_spalte_eb).Value
' ArrEbene(zeile_arr, 1) = .Cells(zeile, temp_spalte_eb + 1).Value
' ArrEbene(zeile_arr, 2) = .Cells(zeile, temp_spalte_eb + 2).Value
' ArrEbene(zeile_arr, 3) = .Cells(zeile, temp_spalte_eb + 3).Value
' ArrEbene(zeile_arr, 4) = .Cells(zeile, temp_spalte_eb + 4).Value
' zeile_arr = zeile_arr + 1
'End If
'Next zeile
'End With
'zeile_arr = zeile_arr - 1
'If anz_ebenen > 0 Then Fahrzeugdatenbank.ListBox_Auswahl_Ebenen.List() = ArrEbene
'End If
~f~
Es ist haar genau der gleiche Ablauf mit dem Array wie beim 1. Lauf aber die Listbox füllt sich nicht mit den Werten aus dem Array.
Kann mit einer von euch sagen warum das nicht geht?
Ein zweites Problem habe ich mit der Formatierung dieser Listbox. Einmal stelle ich diese hierrüber ein:
~f~
'Public Sub Listbox_Ebene_einstellen()
'With Datenbank_2
'.ListBox_Auswahl_Ebenen.ColumnCount = 5
'.ListBox_Auswahl_Ebenen.ColumnWidths = "1cm;1cm;1cm;1cm;2cm"
'End With
~f~
Das geht ohne Probleme. Passt.
Nun möchte ich aber in der gleichen Listbox nach dem löschen des Inhalts der Listbox eine Meldung ausgeben das z.B. das zum Suchkriterium noch keine Daten vorhanden sind
Aber wenn ich diese Listbox vorher nach dem gleichen Schema formatiere
~f~
'Public Sub Listbox_Ebene_einstellen()
'With Datenbank_2
'.ListBox_Auswahl_Ebenen.ColumnCount = 1
'.ListBox_Auswahl_Ebenen.ColumnWidths = "4cm"
'End With
...dann geht das nicht. es sind weiterhin 5 Spalten da mit der vorher definierten Breite. Was mache ich da falsch?
Hinweis. Die Userform (Name Datenbank 2) bleibt immer aktiv und es kommt auch nicht der Befehl Datenbank_2.repaint zum einsatz.
Ich hoffe wirklich das zum einen einer von euch da draußen mein Problem versteht und mir helfen kann.
Leider kann ich meine Datenbank hier nicht hochladen, da dieses mittlerweile sehr groß ist und vom VBA-Code her sehr verflochten ist mit allerlei Funktionen und Userforem usw.
Gruß
Ron