Seite 1 von 2

Listbox füllen

Verfasst: Mo, 28.11.2005 10:59
von Paule
Moin,

hab das Forum durchsucht hab entweder nichts passendes gefunden oder Ich war mal wieder blind.

Ich habe folgendes Problem
Ich habe auf einem Tabellenblatt eine ListBox ("Listbox2")
Die Inhalte dieser möchte ich gern automatisch füllenlassen.
Jedoch bekomme ich da nichts reingeschrieben.

Es handelt sich um kein Model im Dialog (das wär ja auch für mich zu schaffen).

Jemand nen Ahnung?

Grüße

Paule

Verfasst: Mo, 28.11.2005 13:02
von Toxitom
Hey Paule,
Jedoch bekomme ich da nichts reingeschrieben.
[..]
Jemand nen Ahnung?
Sicher :wink:

Wo genau leigen denn deien Probleme? Wenn du es im Dialg schaffst, dann solltest du es auch im Formular schaffen. Woran hakt es?

Du brauchst ein kurzes Beispiel?

OK, bitte sehr :

Code: Alles auswählen

sub ListeFuellen1
  Dim oListBox as Object, aListe(), oForm as Object
  oForm = thisComponent.sheets(0).Drawpage.Forms(0)
  oListBox = oForm.getByName("ListBox1")
  aListe = Array("Januar", "Februar", "März", "April", "Mai", _
                "Juni", "Juli", "August", "September", "Oktober", _
                 "November", "Dezember")
   oListBox.StringItemList = aListe()
end sub

Das Beispiel füllt die Auswahlliste einer ListBox im ersten Formular der ersten Tabellenblattes. Der Name der Listbox heisst dabei "ListBox1" (Groß- und Kleinschreibung beachten!)

Noch Fragen....

Gruss
Thomas

Verfasst: Mo, 28.11.2005 15:37
von Paule
hm ja das klappt toll
Ich will allerdings das die Einträge aus dem Tabellenblatt kommen und krieg die Schleife dazu nicht hin da bei

oListBox.StringItemList = aListe()

alle vorhandenen Einträge gelöscht (oder ersetzt) werden.

mit AddItem (Wäre für mich am logischten(? richtig geschrieben)
gehts nicht.

Verfasst: Mo, 28.11.2005 17:47
von Toxitom
Hey Paule,
...alle vorhandenen Einträge gelöscht (oder ersetzt) werden...
Das stimmt. Bei Formularen (und deren Listbox) gibt es keine Methoden addItem oder RemoveItem. Hier bleibt der einfachste Weg über die Liste.

Wenn du "nur" einen Eintrag hinzufügen willst, dann lies den Array zuerst aus, füge deinen neuen Wert hinzu und schreibe sie zurück.

Auslesen, Array um 1 erweitern, neune Wert einlesen, rückschreiben::

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
Jetzt musst du allerdings selbst Sorge tragen, dass die Liste nicht zu gross wird. Aber auch da gibt es natürlich Möglichkeiten.

Gruss
Thomas

Verfasst: Di, 29.11.2005 08:59
von Paule
Danke für die Antwort aber ich kriege eine Fehlermeldung :

Basic Syntaxfehler:

Dimensionsangaben passen nicht zusammen.



??
1. Was will man mir damit sagen (und kommt nicht mit : das die Dimensionsangaben nicht stimmen)
2. Wo kann ich diese ändern?

Verfasst: Di, 29.11.2005 12:18
von Toxitom
Basic Syntaxfehler:
Dimensionsangaben passen nicht zusammen.
Wo genau kommt die Meldung? Immer die markierte Zeile mit posten - sonst ist das einfach Raterei...

Tippe mal hier:

Code: Alles auswählen

oListbox.stringItemList = Datenarray()
Ich glaube, die Klammern müssen dazu.

Gruss
Thomas

Verfasst: Di, 29.11.2005 12:22
von Paule
ja tschuldige.
ippe mal hier:

Code:
oListbox.stringItemList = Datenarray()
ne angezeigt wird der :

Code: Alles auswählen

	Datenarray(Ubound(Datenarray)) = "neuer Eintrag"

Gruß

Paule[/quote]

Verfasst: Di, 29.11.2005 13:05
von Toxitom
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

Verfasst: Di, 29.11.2005 14:51
von Paule
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

Verfasst: Di, 29.11.2005 15:57
von Toxitom
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

Verfasst: Mi, 30.11.2005 16:56
von Paule
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

Verfasst: Do, 01.12.2005 11:19
von Paule

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

Verfasst: Do, 01.12.2005 13:08
von Toxitom
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

Verfasst: Do, 01.12.2005 16:12
von Paule
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

Verfasst: Do, 01.12.2005 16:22
von Toxitom
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