Wieder Listbox in Dialog auslesen
Moderator: Moderatoren
Wieder Listbox in Dialog auslesen
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
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
Hallo Schosch,
Tia, also da finde ich mehrere Fehler oder Ungereimtheiten im Code:
Fangen wir oben an:
aArray ist jetzt dieses Array.
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
Tia, also da finde ich mehrere Fehler oder Ungereimtheiten im Code:
Fangen wir oben an:
Was soll das bedeuten?Dim i!
Oder das?in2(i) = Array
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:in2(i) = ListBox1.getSelectedItems()
zu schreiben.aArray = ListBox1.getSelectedItems()
aArray ist jetzt dieses Array.
liefert jetzt auch die korrekte Anzahl, und damit weisst du, weiviel Werte gewählt wurden.ob = ubound(aArray())-lbound(aArray())
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
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
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
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
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
Hey Georg,
Ohne es getestet uzu haben, aber der Fehler liegt wahrscheinlich im Bereich der mehrfachen Variablenbenennung.
Ä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
Ohne es getestet uzu haben, aber der Fehler liegt wahrscheinlich im Bereich der mehrfachen Variablenbenennung.
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.Dim ListBox1 as Object
...
ListBox1 = Dlgb.getControl("ListBox1")
Ä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
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
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.
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.
Hey Georg,
Schick mir einfach mal diene Datei per PM, falls keine privaten Daten drin sind. Dann kann ich dir mehr sagen.
Gruss
Thomas
Nein, sollte funktionieren.ich habe jetzt alle möglichen Mehrfachnennungen ausgeschlossen. Leider Ohne Erfolg..... Es kommt die gleiche Meldung wie zuvor schon.
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
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hallo Georg,
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:
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:
Gruß
Stephan
Ich frage mal ganz vorsichtig:Der Dialog selbst wird in einem anderen Makro gestartet.
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:
kommt mir der Verdacht das Du die Variable nicht mit ausreichender Gültigkeit deklariert hast, weil doch:Es kommt mir so vor als würde .getSelectedItems() gar keine Einträge enthalten, obwohl ich in der ListBox1 welche markiert habe.
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