🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Listbox laden mit Bedingung

Alles zur Programmierung im LibreOffice.
Antworten
toni007
Beiträge: 34
Registriert: Mi 31. Okt 2012, 12:31

Listbox laden mit Bedingung

Beitrag von toni007 » Mo 7. Sep 2015, 17:05

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

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Listbox laden mit Bedingung

Beitrag von gogo » Di 8. Sep 2015, 13:01

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.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten