Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

Re: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von Jörg » Do, 13.08.2015 19:44

Jo, dit is prima :-D :-D

Ich habe mich für die erste Variante entschieden, da die Zellen wirklich leer sind.
Die Formel

Code: Alles auswählen

=(KGRÖSSTE(Rechnungen.A2:A500;1))+1
steht in der Eingabemaske.
Die andere Variante heb ich mir für später (kommt bestimmt) auf.

Vielen, vielen Dank nochmal.

Gruß Jörg

Re: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von clag » Do, 13.08.2015 18:52

Hallo Jörg,

sinnvoll wäre ja wohl nicht mehr Zellen zu erfassen wie nötig, dazu müssen die leeren Rechnungnummern wirklich leer sein

Code: Alles auswählen

' >>   oCellRangeSource = oRechn.getCellRangeByName("A2:A500")  << diese Zeile durch die folgenden 3 ersetzen
	oleer = oRechn.columns(0).queryemptycells
	iLetzte = oleer.getbyindex(oleer.getcount-1).getcellbyposition(0,0).celladdress.row
	oCellRangeSource = oRechn.getCellRangeByPosition(0,1,0,iLetzte)

oder sind da irgendwelche Formeln die leer ausgeben dann muss man innerhalb der Schleife die Nuller ausfiltern

Code: Alles auswählen

	Dim aTemp(UBound(aSourceDataArray())) As String
	For i = 0 To UBound(aTemp())
		aDataArrayRow() = aSourceDataArray(i)
		if aDataArrayRow(0) = "" then exit For
		aTemp(i) = aDataArrayRow(0)
	next i
	ia = i-1
	Redim preserve aTemp(ia)    
	Dim aSource(ia)
	for ir = 0 to ia
		i=i-1
		aSource(i) = aTemp(ir)
	next
nu kannst du dir eine Variante aussuchen.

Re: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von Jörg » Do, 13.08.2015 15:35

Hallo clag und Stephan,
danke für die Mühe, die Ihr Euch macht.
Gut, die Werte in der Listbox sind nun absteigend sortiert.
Aber eine Kleinigkeit wäre da noch (hoffe Ihr haltet mich nicht für ausverschämt :) ).
Der Bereich A2:A500 enthält die tatsächlichen Rechnungsnummern und die zukünftigen. Letztere aber werden immer erst mit Rechnungserstellung per Formel generiert und zusammen mit den anderen Daten aus meiner Eingabemaske heraus in die Tabelle "Rechnungen" per Makro kopiert.
D.h., daß der Bereich A195:A500 noch keine Rechnungsnummern enthält.
Das wiederum bedeutet, dass der obere Bereich der aufgeklappten Listbox leer ist und somit wieder scrollen angezeigt ist.
Habt Ihr dafür auch noch ´ne Idee :idea: :wink:

Code: Alles auswählen

	DialogLibraries.loadLibrary("Standard")
	oDialog4 = CreateUnoDialog(DialogLibraries.Standard.Dialog4)
	oForm = DialogLibraries.Standard.Dialog4
oDialog4 = CreateUnoDialog( oForm )
oRechn = ThisComponent.Sheets.GetByName("Rechnungen")
oCellRangeSource = oRechn.getCellRangeByName("A2:A500") 
aSourceDataArray() = oCellRangeSource.getDataArray()
Dim aSource(UBound(aSourceDataArray())) As String
x = UBound(aSourceDataArray())
For I = LBound(aSource()) To UBound(aSource())
   aDataArrayRow()   = aSourceDataArray(I)
   aSource(x) = aDataArrayRow(0)
   x = x-1                          '
Next I
    oDialog4.Model.getByName("ListBox1").StringItemList = aSource()
    oDialog4.execute
Gruß Jörg

Re: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von Stephan » Mi, 12.08.2015 19:24

danke für die Korrektur, wobei 'Kleinigkeit vergessen' untertrieben ist, denn mein Code war mit Blick auf das zu erreichende Ziel das Array umzukehren völlig wirkungslos.


Gruß
Stephan

Re: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von clag » Mi, 12.08.2015 17:54

Hallo Jörg,

Stephan hat in der Eile wohl eine Kleinigkeit vergessen zu erwähnen
du must natürlich für das "Zielarray" die Zählweise umdrehen.

Code: Alles auswählen

Dim aSource(UBound(aSourceDataArray())) As String
x=0
 For I = UBound(aSource()) To LBound(aSource()) Step -1 ' vorher LBound to UBound
   aDataArrayRow()   = aSourceDataArray(I)
   aSource(x) = aDataArrayRow(0)
   x = x+1
Next I
    oDialog4.Model.getByName("ListBox1").StringItemList = aSource()

mit deinem original Code geht das natürlich auch nur umgedreht

Code: Alles auswählen

Dim aSource(UBound(aSourceDataArray())) As String
x = UBound(aSourceDataArray())
For I = LBound(aSource()) To UBound(aSource())
   aDataArrayRow()   = aSourceDataArray(I)
   aSource(x) = aDataArrayRow(0)
   x = x-1
Next I
    oDialog4.Model.getByName("ListBox1").StringItemList = aSource()

Re: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von Jörg » Mi, 12.08.2015 17:41

Hallo Stephan, danke erstmal.
Hab jetzt so eingefügt. Aber die Liste bleibt immer noch aufsteigend sortiert: :(

Code: Alles auswählen

oRechn = ThisComponent.Sheets.GetByName("Rechnungen")
oCellRangeSource = oRechn.getCellRangeByName("A2:A500")
   'oCellRangeSource = oRechn.getCellRangeByName("A500:A2") 'ging auch nicht
aSourceDataArray() = oCellRangeSource.getDataArray()   
Dim aSource(UBound(aSourceDataArray())) As String
 For I = UBound(aSource()) To LBound(aSource()) Step -1 ' vorher LBound to UBound 
   aDataArrayRow()   = aSourceDataArray(I)
   aSource(I) = aDataArrayRow(0)
Next I
    oDialog4.Model.getByName("ListBox1").StringItemList = aSource()
Gruß Jörg

Re: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von Stephan » Mi, 12.08.2015 16:51

Gibt es eine Möglichkeit die Werte in einer Listbox (hier Rechnungsnummern) in der Listbox direkt zu sortieren


nein, nicht direkt in der Listbox, aber Du kannst doch die Werte gleich genau umgekehrt in das Array schreiben das Du an die Listbox übergibst, wenn die Werte in derr Tabelle nur 'falsch' herum sortiert sind.

Code: Alles auswählen

'...
For I = UBound(aSource()) To LBound(aSource()) Step -1
   aDataArrayRow()   = aSourceDataArray(I)
   aSource(I) = aDataArrayRow(0)
Next I
'...
Gruß
Stephan

Re: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von Jörg » Mi, 12.08.2015 16:41

Hallo clag,
ich habe mir einen Dialog gebaut, der mir anhand der Rechnungsnummer alle relevanten Daten anzeigt und mit dem ich auch Änderungen vornehmen kann. also Beispielsweise das Mahnungsdatum ändern und sowas.
Die Rechnungsnummer hole ich mir aus der Listbox.
In der Tabelle () sind die Rechnungen(-nummern) aufsteigend sortiert. Demzufolge auch in der Listbox.
Kleines Übel dabei:
Beim Aufklappen der Listbox erscheint als erstes die älteste Rechnungsnummer. So ist scollen angesagt.Wichtig sind halt in der Regel die neuesten.
Was ja auch eine Möglichkeit wäre, wenn die zuletzt gewählte Rechnungsnummer "stehen" bliebe, denn bei jedem neuen Öffnen des Dialogs ist die Listbox "leer".(Natürlich nicht nach dem Aufklappen)
Gut ich könnte ja den Bereich verkleinern..... Also A132:A500 z.Bsp.
Aber dann fallen mir schon weitere Fragen ein.... :idea: :idea: :idea:
Gruß Jörg

Re: Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von clag » Mi, 12.08.2015 16:17

Hallo Jörg,

ich erkenne nicht was dein Plan ist,
du liest 500 Zellen ein um was damit zu tun?

Sortieren:Werte aus Zellbereich einer Tabelle in einer Listbox (Dialog)

von Jörg » Mi, 12.08.2015 15:41

Hallo Fachleute,
Clag bat mich, für meine Frage ein neues Thema zu eröffnen. Meine Frage lautete:
Gibt es eine Möglichkeit die Werte in einer Listbox (hier Rechnungsnummern) in der Listbox direkt zu sortieren oder muß die Tabelle mit dem Zellbereich sortiert werden?
Im vorliegenden Fall sollte abwärts sortiert werden.(False?)
Die Rechnungsnummern formatiert als Zahl Standard.

Der Code für die Listboxeinträge:

Code: Alles auswählen

	oForm = DialogLibraries.Standard.Dialog4
    oDialog4 = CreateUnoDialog( oForm )
oRechn = ThisComponent.Sheets.GetByName("Rechnungen")
oCellRangeSource = oRechn.getCellRangeByName("A2:A500") 
aSourceDataArray() = oCellRangeSource.getDataArray()   
Dim aSource(UBound(aSourceDataArray())) As String
For I = LBound(aSource()) To UBound(aSource())
   aDataArrayRow()   = aSourceDataArray(I)
   aSource(I) = aDataArrayRow(0)
Next I
    oDialog4.Model.getByName("ListBox1").StringItemList = aSource()
Bedanke mich schon mal.
Gruß Jörg

Nach oben