Wieder Listbox in Dialog auslesen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

schosch
*
Beiträge: 12
Registriert: Sa, 21.08.2004 20:22

Wieder Listbox in Dialog auslesen

Beitrag von schosch »

Hallo,
ich habe die anderen Beiträge zu diesem Thema gelesen, komme aber trozdem mit meinem Makro nicht weiter. Ich möchte die markierten Listeneinträge in einem Dialog ein eine Tabelle schreiben lassen.
Die Ausgabe der Markierten Listeneinträge soll ein Array sein. Aber auch wenn ich das berücksichtige komme ich auf keinen grünen Zweig. Ich verzweifele nur beiläufig daran............
Wer hat das Problem denn im Griff und kann mir einen Hinweis geben? Hier ist mein Versuch der vielleicht etwas hölzern wirkt da ich noch ein ziemlicher Anfänger bin:
Der Dialog selbst wird in einem anderen Makro gestartet. Mit diesem sollen nur die Einträge kopiert und der Dialog geschlossen werden:

Sub Add_Cat
Dim Dlgb as Object
Dim ListBox1 as Object
Dim i!
Dim in2 as Variant
Dim ob
Dim Sheet2 as Object
in2(i) = Array
Sheet2 = ThisComponent.Sheets(1)
DialogLibraries.LoadLibrary("Standard")
Dlgb = CreateUnoDialog(DialogLibraries.Standard.Dlgb)
ListBox1 = Dlgb.getControl("ListBox1")
in2(i) = ListBox1.getSelectedItems()
ob = ubound(in2(i))-lbound(in2(i))
msgbox ob
Dlgb.endExecute()
End Sub

ich käme ja schon weiter wenn in der msgbox nicht "-1" ausgegeben würde, das bedeutet nämlich, dass kein Eintrag ausgewählt wurde.
Über Hilfe iergendeiner Art würde ich mich sehr freuen, da ich schon seit 2 Tagen damit nicht weiterkomme.
Ich habe auch den StarOffice7 Programmer´s Guide schon einigermaßen durchgekämmt. Was mich hier wundert ist die Tatsache, dass das Array als Ausgabe nicht erwähnt wird.

Georg

suse9.1/oo1.1.2
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Schosch,

Tia, also da finde ich mehrere Fehler oder Ungereimtheiten im Code:

Fangen wir oben an:
Dim i!
Was soll das bedeuten?
in2(i) = Array
Oder das?
in2(i) = ListBox1.getSelectedItems()
OK, das getSelectedItems() liefert einen Array zurück, der soviel Einträge hat, wie ausgewählt wurden. Da du das vorher nicht weißt, kannst du kein dimensioniertes Array vorstellen. Es reicht:
aArray = ListBox1.getSelectedItems()
zu schreiben.
aArray ist jetzt dieses Array.
ob = ubound(aArray())-lbound(aArray())
liefert jetzt auch die korrekte Anzahl, und damit weisst du, weiviel Werte gewählt wurden.
Achtung! Wurde nichts ausgewählt, gibt es hier einen Fehler!
Mit UBound und Lbound bekommst du aber auch die gültigen Indices heraus. Und dann gilt:

Code: Alles auswählen

msgbox aArray(0)    ' erster selektierter Eintrag
und so weiter.
Ich hoffe, das hielft die erstmal weiter.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
schosch
*
Beiträge: 12
Registriert: Sa, 21.08.2004 20:22

Beitrag von schosch »

Hallo Thomas,

Vielen Dank für die schnelle Antwort!

Ich habe den Code verbessert und bekomme jetzt die Fehlermeldung:
"Unzulässiger Wert oder Datentyp. Index außerhalb des definierten Bereichs."

Sub Add_Cat
Dim Dlgb as Object
Dim ListBox1 as Object
Dim Sheet2 as Object
Sheet2 = ThisComponent.Sheets(1)
DialogLibraries.LoadLibrary("Standard")
Dlgb = CreateUnoDialog(DialogLibraries.Standard.Dlgb)
ListBox1 = Dlgb.getControl("ListBox1")
aArray = ListBox1.getSelectedItems()

msgbox aArray(0) 'hier kommt die Fehlermeldung

Dlgb.endExecute()
End Sub

Es kommt mir so vor als würde .getSelectedItems() gar keine Einträge enthalten, obwohl ich in der ListBox1 welche markiert habe.

Schönen Gruss
Georg
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Georg,

Ohne es getestet uzu haben, aber der Fehler liegt wahrscheinlich im Bereich der mehrfachen Variablenbenennung.
Dim ListBox1 as Object
...
ListBox1 = Dlgb.getControl("ListBox1")
Wenn die Box schon den Variablennamen "Listbox1" trägt, ist es ungeschickt, diesen hier nochmals zu verwenden. Zudem hattest du "ListBox1" bereits als Objekt definiert.
Ändere das mal, dann sollte es funktionieren.
Lass das "DIM as Object" weg, es entsteht nämlich ein Array, kein Objekt.
Da du die Dimension nicht kennst, solltest du ihn auch nicht vorab definieren.

Gruss
Thomas

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
schosch
*
Beiträge: 12
Registriert: Sa, 21.08.2004 20:22

Beitrag von schosch »

Hallo Thomas,
ich habe jetzt alle möglichen Mehrfachnennungen ausgeschlossen. Leider Ohne Erfolg..... Es kommt die gleiche Meldung wie zuvor schon.
Kann es evtl sein, dass ich iergenwelche Funkionen vorher laden muss? Oder so eine art on/off -Schalter noch umlegen muss? Mir kommt es so vor als würde ich ein Auto ohne Anlasser starten wollen...

Sub Add_Cat
Dim Dlg as Object
Dim Auswahl
Dim Sheet2 as Object
Sheet2 = ThisComponent.Sheets(1)
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dlgb)
Auswahl = Dlg.getControl("ListBox1")
aArray = Auswahl.getSelectedItems()
msgbox aArray(0)
Dlgb.endExecute()
End Sub

Gruss
Georg

P.S. Mir das Handbuch zuzulegen ist vielleicht wirklich keine schlechte Idee.
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Georg,

ich habe jetzt alle möglichen Mehrfachnennungen ausgeschlossen. Leider Ohne Erfolg..... Es kommt die gleiche Meldung wie zuvor schon.
Nein, sollte funktionieren.
Schick mir einfach mal diene Datei per PM, falls keine privaten Daten drin sind. Dann kann ich dir mehr sagen.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Hallo Georg,
Der Dialog selbst wird in einem anderen Makro gestartet.
Ich frage mal ganz vorsichtig:
Willst Du uns damit sagen das Du den Dialog etwa so gestartet hast:

Sub starten
Dim Dlgb as Object
DialogLibraries.LoadLibrary("Standard")
Dlgb = CreateUnoDialog(DialogLibraries.Standard.Dlgb)
Dlgb.Execute()
End Sub


und nun das hier startest (nach Auswahl in der Listbox):

Sub Add_Cat
Dim Dlgb as Object
Dim ListBox1 as Object
Dim Sheet2 as Object
Sheet2 = ThisComponent.Sheets(1)
DialogLibraries.LoadLibrary("Standard")
Dlgb = CreateUnoDialog(DialogLibraries.Standard.Dlgb)
ListBox1 = Dlgb.getControl("ListBox1")
aArray = ListBox1.getSelectedItems()

msgbox aArray(0) 'hier kommt die Fehlermeldung

Dlgb.endExecute()
End Sub


denn wenn ich lese:
Es kommt mir so vor als würde .getSelectedItems() gar keine Einträge enthalten, obwohl ich in der ListBox1 welche markiert habe.
kommt mir der Verdacht das Du die Variable nicht mit ausreichender Gültigkeit deklariert hast, weil doch:

Sub starten
...
Dlgb = CreateUnoDialog(DialogLibraries.Standard.Dlgb)
...
End Sub


und:

Sub Add_Cat
...
Dlgb = CreateUnoDialog(DialogLibraries.Standard.Dlgb)
ListBox1 = Dlgb.getControl("ListBox1")
...
End Sub


zwei völlig verschiedene Dinge sind.
Die Listbox in der Du Deine Auswahl triffst ist die beim Starten des Dialogs referenziert wurde, die Listbox die Du auslesen willst ist doch nirgens zu sehen. Die Objektvariable "Dlgb" welche beim Ausführen des ersten Codes erzeugt wird ist doch nicht mehr existent nachdem der Code gelaufen ist. Die zweite gleichnamige Variable im zweiten Code bezieht sich doch nicht auf die Listbox die Du gestartet hast.
Du müßtest falls das der Fehler ist die Variable zumindest auf Modulebene deklarieren, vielleicht so:

Code: Alles auswählen

'Gültigkeitsbereich für Modul
Private Dlg as Object 

Sub start
DialogLibraries.LoadLibrary("Standard") 
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dlgb) 
Dlg.execute()
End sub


Sub Add_Cat 
Dim Auswahl 
Auswahl = Dlg.getControl("ListBox1") 
aArray = Auswahl.getSelectedItems()
For i = 0 to ubound(aArray) 
	inhalt = inhalt & aArray(i) & CHR(13)
Next i
MsgBox inhalt 
Dlg.endExecute() 
End Sub



Gruß
Stephan
Antworten