Seite 1 von 1
Wieder Listbox in Dialog auslesen
Verfasst: Sa, 21.08.2004 23:42
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
Verfasst: So, 22.08.2004 09:21
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:
und so weiter.
Ich hoffe, das hielft die erstmal weiter.
Gruss
Thomas
Verfasst: So, 22.08.2004 13:51
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
Verfasst: So, 22.08.2004 14:02
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
Verfasst: So, 22.08.2004 14:39
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.
Verfasst: So, 22.08.2004 14:56
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
Verfasst: So, 22.08.2004 20:42
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