Listbox füllen

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: Listbox füllen

von Paule » Sa, 03.12.2005 13:08

Wow, klappt schnell und sauber!

Brauch wohl noch ein bischen den Code Vollständig zu vertehen..Aber übung macht den Meister :)

Vielen Dank

Paule

von Toxitom » Sa, 03.12.2005 11:37

Hey Paule,

so, hier nun das komplette Makro (oder besser die beiden). Das alles sollte ausreichen :wink:

Code: Alles auswählen

dim oDoc as object   'global definiert

REM dies Makro aufrufen!
Sub Liste2Start   
	dim sTab as string, iSpalte as integer
	oDoc = thisComponent
	osheet = oDoc.sheets.getByName("Ansicht")
	sTab = oSheet.getCellByPosition(17,0).string
	REM ich gehe davon aus, dass in Zelle(1,2) die Zahl als
	REM String (Text) steht!
	iSpalte = CInt(oSheet.getCellByPosition(1,2).string) 
	Liste2Fuellen(sTab, iSpalte)  'Aufruf des nächsten Makros
End Sub

sub Liste2fuellen(sTab as String, iSpalte as integer)
	Dim oListBox2 as Object, oForm as Object
	oForm = oDoc.sheets.getbyname("Ansicht").Drawpage.Forms(0)
	oListBox2 = oForm.getByName("ListBox2") 
	REM Spaltenarray erzeugen
	aSp = array( ,"FO", "FP", "FQ", "FR", "FS", "FT", "FU", "FV")
	REM Tabellenblatt auswählen
	oSheet2 = oDoc.sheets.getByName(sTab)
	for i = 3 to 65535
		oZelle = oSheet2.getCellRangeByName(aSp(iSpalte) & i)
		if oZelle.getType() then
		  sListe = sListe & ";" & oZelle.string  'wenn Zelle nicht leer
		else 
		  exit for  'wenn Zelle leer
		end if
	next
	sListe = right(sListe, len(sListe)-1) 'den führenden Trenner löschen
	aListe2 = split(sListe, ";")          'Umwandlung in Array
	oListbox2.stringItemList = aListe2()  'eintragen in Liste
end sub
Gruss
Thomas

von Paule » Fr, 02.12.2005 09:07


Listbox 1 auf Tabelle "Ansicht" enhält Spaltenüberschriften (oder was auch immer). Dort wählt man nun einen speziellen Eintrag, dann soll Listbox 2 die entsprechenden Einträge der zugeordneten Spalte FO bis FV - identifiziert durch die zurückgegebene Nummer - enthalten?
Jep.
Wozu speicherst du die Nummer in der Zelle B3 ? Brauchst du sie sonst noch irgendwie?
Ja ein Paar Formeln beziehen sich darauf.
Gib mir bitte noch den Code für deine T1List - nur der Vollständigkeitshalber.
der einzige unterschied zu T2List ist nur das überall wo T2 steht T1 ins Makro muss, die tabellen haben die gleiche Struktur.

Viele grüße

Paule

von Toxitom » Fr, 02.12.2005 08:56

Morgen Paule,

ok, es kommt noch ein bischen mehr Licht ins Dunkle. Noch ein paar Nachfragen:

Listbox 1 auf Tabelle "Ansicht" enhält Spaltenüberschriften (oder was auch immer). Dort wählt man nun einen speziellen Eintrag, dann soll Listbox 2 die entsprechenden Einträge der zugeordneten Spalte FO bis FV - identifiziert durch die zurückgegebene Nummer - enthalten?
Wozu speicherst du die Nummer in der Zelle B3 ? Brauchst du sie sonst noch irgendwie?
Üblicherweise würdest du doch ein Makro starten in Kombination des Ereignisses "modifiziert" der ersten Listbox. Dann kannst du doch direkt die Auswahl erhalten - wozu zwischenspeichern?

OK, der Code ist nicht so kompliziert, bin aber erst Samstag wieder online. Also bitte bis dahin gedulden.
Gib mir bitte noch den Code für deine T1List - nur der Vollständigkeitshalber.

Gruss
Thomas

von Paule » Fr, 02.12.2005 08:18

Morgen Thomas,
Also, du hast eine Listbox, die die Zahlen 1-8 drin hat.
So ähnlich, die Lisbox hat die Spaltenüberschriften drin und gibt die Zahlen 1-8 auf "Ansicht"(Tabelle3), in Zelle B3 aus.

IN der Spalte können Inhalte in den Zellen stehen, maximal 65565 (wirklich so viel???) , wobei diese jedoch nicht kontinuierlich gefüllt sind. Leere Zellen sollen nicht in die Auswahlbox übernommen werden.
Soweit richtig?
Ja richtig, aber die Zellen sind durchgehend gefüllt, also ohne Leerzellen, deswegen sind die 65535 Zeilen auch egal da das Makro bei der ersten leeren Zeile abbricht.
Du hast 8 mögliche Spalten? kannst du die benennen? (als A-H oder so?)
FO bis FV
Und was war mit dem T1 und T2?
:) T1 = Tabelle1, T2 = Tabelle2

Gruß

Paule

von Toxitom » Do, 01.12.2005 17:15

Hey Paule,

ähmmm, leider noch nicht verstanden.
Also, du hast eine Listbox, die die Zahlen 1-8 drin hat.
Jetzt wählt man eine aus, - diese liefert einen Code (Zahl).
Je nach Zahl soll jetzt in der zweiten Listbox die Inhalte der Spalte aufgeführt werden, deren Nummer der Zahl entspricht.
IN der Spalte können Inhalte in den Zellen stehen, maximal 65565 (wirklich so viel???) , wobei diese jedoch nicht kontinuierlich gefüllt sind. Leere Zellen sollen nicht in die Auswahlbox übernommen werden.
Soweit richtig?
Du hast 8 mögliche Spalten? kannst du die benennen? (als A-H oder so?) und wirklich so viele mögliche Einträge? Da geht die Performance ganz schön in die Knie....
Und was war mit dem T1 und T2? Das habe ich nicht verstanden...

Gruss
Thomas

von Paule » Do, 01.12.2005 16:34

:)

Ich habe auf dem Tabellenblatt "Ansicht" 2 Listboxen
Die erste bezieht sich auf die Spaltenüberschriften die sich auf die Auswahl davor (über Dialog) bezieht (Deshalb im code T1 und T2),und gibt eine Zahl aus.

Wenn eine Spalte der ersten Box ausgewählt wurde soll die zweite Box die Inhalte der Spalte zeigen. Und die sind ja Variabel. Deshalb das Makro.



Danach soll wenn ein Eintrag ausgewählt wurde die gesamte Zeile ausgegeben werden (nur um den Zweck zu erwähnen...).

grüße Paule

von Toxitom » Do, 01.12.2005 16:22

Hey Paule,

Bitte:
Thomas hat geschrieben: Kannst du mal in Worten beschreiben, was du eigentlich erreichen willst?
DAS würde ich gerne sehen. Nur so kann man den Weg optimieren :D

Thomas

von Paule » Do, 01.12.2005 16:12

hi Thomas,
Also, ich biete meine Hilfe an....
gerne :D

Code: Alles auswählen

Dim oListBox as Object, oForm as Object
oForm = thisComponent.sheets.getbyname("Ansicht").Drawpage.Forms(0)
oListBox = oForm.getByName("ListBox2") 
dim DatenArray()
dim DatenArray1()
dim DatenArray2()
dim DatenArray3()
dim DatenArray4()
dim DatenArray5()
dim DatenArray6()
dim DatenArray7()
dim DatenArray8()
  
  aListe = Array("")
  oListBox.StringItemList = aListe() 
  
  

 osheet = thiscomponent.sheets.getbyname("Ansicht")
 ozelle = osheet.getcellbyposition(17,0)
 If ozelle.string = "T1" then 
 Goto T1List
 end if
 if ozelle.string = "T2" then 
 Goto T2List
 end if
 
 T2List:
 osheet = thiscomponent.sheets.getbyname("Ansicht")
 ozelle = osheet.getcellbyposition(1,2)
 If ozelle.string = "1" then
 for i = 2 to 65535
 osheet = thiscomponent.sheets.getbyname("T2")
 ozelle = osheet.getcellbyposition(170,i)
 If ozelle.string = "" then
 goto lt1_ende else
 stext = ozelle.string
 DatenArray = oListBox.stringItemList
 iDim = UBound(DatenArray)
 redim preserve DatenArray( iDim+1)
 DatenArray(Ubound(DatenArray())) = stext
 oListbox.stringItemList = DatenArray()
end if
next
end if
lt1_ende:


 osheet = thiscomponent.sheets.getbyname("Ansicht")
 ozelle = osheet.getcellbyposition(1,2)
 If ozelle.string = "2" then
 for i = 2 to 65535
 osheet = thiscomponent.sheets.getbyname("T2")
 ozelle = osheet.getcellbyposition(171,i)
 If ozelle.string = "" then
 goto lt2_ende else
 stext = ozelle.string
 DatenArray1 = oListBox.stringItemList
 iDim = UBound(DatenArray1)
 redim preserve DatenArray1( iDim+1)
 DatenArray(Ubound(DatenArray1())) = stext
 oListbox.stringItemList = DatenArray1()
end if
next
end if
lt2_ende:
' usw.. halt 8 mal
Eine bessere lösung viel mir nicht ein.

Viel Glück :)


Paule

von Toxitom » Do, 01.12.2005 13:08

Hey Paule,

hmm, der Code sieht schon noch ziemlich "wüst" aus. Auch finde ich keinen DatenArray1() - aber vielleicht hast du das je abgeändert.

Kannst du mal in Worten beschreiben, was du eigentlich erreichen willst? Ich würde den Code dann mal ein bischen "optimieren".
Auch wenn Basic nach wie vor die goto Befehle unterstützt - man sollte sie nicht mehr verwenden, das macht den Code ziemlich "unleserlich".

Also, ich biete meine Hilfe an....

Gruss
Thomas

von Paule » Do, 01.12.2005 11:19

Code: Alles auswählen

Muss ich DatenArray(1) oder so schreiben , also sagen das ich halt mehr davon hab ? 
Ok DatenArray1() usw.....

Erst fragen, dann denken


Paule

von Paule » Mi, 30.11.2005 16:56

ah ja hast Recht...
Mein Pc hat manchmal zuckungen :?
Nach abspeichern, schließen- neustart gings.... hm...?!?
aber egal.


Ich will das ja nun in eine Schleife packen also ungefähr so.

Code: Alles auswählen

 osheet = thiscomponent.sheets.getbyname("Ansicht")
 ozelle = osheet.getcellbyposition(1,2)
 If ozelle.string = "1" then
 for i = 2 to 65535
 osheet = thiscomponent.sheets.getbyname("T2")
 ozelle = osheet.getcellbyposition(170,i)
 If ozelle.string = "" then
 goto lt1_ende else
 stext = ozelle.string
 DatenArray = oListBox.stringItemList
 iDim = UBound(DatenArray)
 redim preserve DatenArray( iDim+1)
 DatenArray(Ubound(DatenArray())) = stext
 oListbox.stringItemList = DatenArray()
end if
next
end if
lt1_ende:


 osheet = thiscomponent.sheets.getbyname("Ansicht")
 ozelle = osheet.getcellbyposition(1,2)
 If ozelle.string = "2" then
 for i = 2 to 65535
 osheet = thiscomponent.sheets.getbyname("T2")
 ozelle = osheet.getcellbyposition(171,i)
 If ozelle.string = "" then
 goto lt2_ende else
 stext = ozelle.string
 DatenArray = oListBox.stringItemList
 iDim = UBound(DatenArray)
 redim preserve DatenArray( iDim+1)
 DatenArray(Ubound(DatenArray())) = stext
 oListbox.stringItemList = DatenArray()
end if
next
end if
lt2_ende:
klappt aber nicht wieder so ein dimensionskram...

Muss ich DatenArray(1) oder so schreiben , also sagen das ich halt mehr davon hab ?

gruß paule

von Toxitom » Di, 29.11.2005 15:57

Hey Paule,
stringItemList = Datenarray()
oListbox = stringItemList
Das kann ja auch nicht funktionieren :wink:

Aber: Ich hab dir doch den passenden Code gepostet. Der jedenfalls funktioniert bei mir!

Gruss
Thomas

von Paule » Di, 29.11.2005 14:51

Hallo Thomas,
Na, dann pass eben die Zeile entsprechend an.
Hab ich schon versucht... sorry das ich das nicht mitgepostet hab :roll:
Dann kriege ich die Fehlermeldung

IllegalArgumentException
Message:.

Also hab ich wieder ein bischen rumpobiert und kam auf das hier:


Code: Alles auswählen

dim DatenArray()
Datenarray = oListBox.stringItemList
iDim = UBound(Datenarray)
redim preserve DatenArray( iDim+1)
Datenarray(Ubound(Datenarray())) = "neuer Eintrag"
stringItemList = Datenarray()
oListbox = stringItemList
Krieg nun kein Fehler aber passiert auch nichts :x

Gruß Paule

von Toxitom » Di, 29.11.2005 13:05

ne angezeigt wird der : ...
Na, dann pass eben die Zeile entsprechend an.
OK, schludrige Schreibweise - Arrays werden mit den Klammern definiert....

Code: Alles auswählen

dim DatenArray()
Datenarray = oListBox.stringItemList
iDim = UBound(Datenarray)
redim preserve DatenArray( iDim+1)
Datenarray(Ubound(Datenarray())) = "neuer Eintrag"
oListbox.stringItemList = Datenarray()
Das sollte passen.

Thomas

Nach oben