Seite 1 von 1

Listbox laden mit Bedingung

Verfasst: Mo 7. Sep 2015, 17:05
von toni007
Hallo zusammen,

ich lade eine Listbox, indem ich die Werte in ein Array schreibe:

Code: Alles auswählen

Sub Listbox_Load (oDialog as Object, oSheet As Object, oListbox as String, strBereich As String, i As Integer)
	Dim oCursor
	Dim aZeile
	Dim aListe()
	Dim adat
	Dim oBereich
	Dim endzeile
	Dim k
	
	oCursor = oSheet.createCursor()
	oCursor.goToEndOfUsedArea(False) 
	endzeile = oCursor.getRangeAddress.EndRow + 1
	
	oBereich = oSheet.getCellRangeByName(strBereich & endzeile)
	adat = oBereich.getDataArray()
	
	ReDim aListe(uBound(adat)) ' Anzahl der Arrayfelder (Anzahl Tabelleneinträge - 1) 
	For k = 0 to uBound(adat)
		aZeile = adat(k)
		aListe(k) = aZeile(0)
	Next
	oDialog.getControl(oListbox & i).Model.StringItemList = aListe()
End Sub
Aufruf:

Code: Alles auswählen

Call Listbox_Load (oFrmTV_EL, oSheet_Betriebsart, "lbBA_", "A5:A", 1)
Das klappt super und vor allen Dingen sehr schnell (immerhin mehr als 3.200 items)

Nun möchte ich diese Liste aber über eine Bedingung einschränken ...

Code: Alles auswählen

Sub Listbox_Load111 (oDialog as Object, oSheet As Object, oListbox as String, strBereich As String, i As Integer, strBereichGueltig As String)
	Dim oCursor
	Dim aZeile
	Dim aListe()
	Dim adat
	Dim adatGueltig
	Dim oBereich
	Dim oBereichGueltig
	Dim endzeile
	Dim k
	
	oCursor = oSheet.createCursor()
	oCursor.goToEndOfUsedArea(False) 
	endzeile = oCursor.getRangeAddress.EndRow + 1
	
	oBereich = oSheet.getCellRangeByName(strBereich & endzeile)
	oBereichGueltig = oSheet.getCellRangeByName(strBereichGueltig & endzeile)	
	adat = oBereich.getDataArray()
	adatGueltig = oBereichGueltig.getDataArray()	
	ReDim aListe(uBound(adat)) ' Anzahl der Arrayfelder (Anzahl Tabelleneinträge - 1) 

	For k = 0 to uBound(adat)
		If CDate(adatGueltig(k)(0)) = "31.12.9999" Then
			msgbox CDate(adatGueltig(k)(0)) & " ups"

			aZeile = adat(k)
			msgbox aZeile(0)		
			aListe(k) = aZeile(0)
		End If
	Next
	oDialog.getControl(oListbox & i).Model.StringItemList = aListe()
End Sub
Aufruf:

Code: Alles auswählen

Call Listbox_Load111 (oFrmTV_EL, oSheet_Betriebsart, "lbBA_", "A5:A", 1, "BO5:BO")
Auch das klappt soweit.
Es werden jetzt nur noch Einträge angezeigt, die in Spalte 'BO' das Datum '31.12.9999' haben.
Leider ist die Anzahl der Listboxzeilen aber noch dieselbe, die rausgefilterten Zeilen sind jetzt leer.
Wie entferne ich jetzt die Leerzeilen aus meiner Listbox, oder kann die If-Bedingung schon beim 'getDataArray' angewandt werden?

Gruß Thomas

Re: Listbox laden mit Bedingung

Verfasst: Di 8. Sep 2015, 13:01
von gogo
Listboxen sind was ihre Itemszahl angeht recht statisch.
Um sie neu zu füllen muss sie erst geleert werden:

Code: Alles auswählen

oListenfeld = oDialog.getControl(oListbox & i)
oListenfeld.removeItems(0, oListenfeld.getItemCount)
oListenfeld.addItems(aListe(),0)
ob die letzte Zeile so funktioniert wie sie dasteht musst Du testen, ansonsten kannst Du das vermutlich über "oListenfeld.Model.StringItemList = aListe()" machen.