Auch wenn Du meine Hilfe scheinbar nicht willst, ist das Problem genau das was ich anfangs nannte, Du hast einen Dialog der bereits läuft (Generationenschiessen) versuchst aber diesen Dialog neu zu initialisieren um dann aus dem neu initialisiereten Dialog die Combobhox auszulesen.
Das kann nicht gehen weil (abgesehen von zusätzlichem Durcheinander bei den Variablennamen bzw. dahinterstehenden Objekten) im neu initialisierten Dialog die Combobox keinerlei Inhalt hat, denn der wird ja nicht einmal eingelesen (was auch sinnlos wäre da ja in dem neuen Dialog nicht die Auswahl erfolgt ist).
kurz gesagt:
-der Dialog "Generationenschiessen" ist geöffnet (ich nenne ihn hier einmal "Dialog1")
-Du wählst auf Dialog1 bei der Combobox etwas aus
-Du klickst auf die Schaltfläche von Dialog1
nun läuft der Code:
Code: Alles auswählen
DialogLibraries.loadLibrary("Standard")
oGenerationenDlg = CreateUnoDialog(DialogLibraries.Standard.Generationenschiessen)
der bewirkt das eine weitere 'Instanz' den Dialogs "Generationenschiessen" initialisiert aber noch nicht sichtbar angezeigt wird (ich nenne sie hier einmal "Dialog2")
nun läuft:
Code: Alles auswählen
oGanzerName = oGenerationenDlg.getModel().getbyname("cbbGanzerName")
oGanzerName enthält nun den Bezug auf die Combobox "cbbGanzerName" im nicht sichtbaren Dialog2
Folglich versucht nun:
eine Eintrag der combobox zu lesen der überhaupt nicht da ist, denn die Combobox in Dialog2 wurde weder mit Einträgen gefüllt noch wurde dort etwas ausgewählt (es geht garnicht denn Dialog2 ist ja überhaupt nicht sichtbar).
Lösung:
zunächst einmal musst Du Ordnung in die Objektvariablen der Dialoge bringen (das hat schon Balu angesprochen), da ich die Datei "Generation2016.ods" nicht habe schalte ich damit die Makros erstmal überhaupt durchlaufen Folgendes durch Auskommentieren ab:
Code: Alles auswählen
'...
oFeld = oAuswahl.getModel().getByName("cbbGanzerName")
oFeld.StringItemList = GanzerName
oDocument.close(true)
'call ListeGen
'Dim Nummer(15)
'For zweilesen = 1 to 15
'oDocument.currentcontroller.frame.containerwindow.toFront
'oBlatt = oDocument.sheets("Tabelle1")
'oZelle = oBlatt.getcellrangebyname("A" & zweilesen +1)
'Nummer(zweilesen) = oZelle.string
'Next zweilesen
'oFeld = oAuswahl.getModel().getByName("cbbMann")
'oFeld.StringItemList = Nummer
End if
oAuswahl.Execute()
nun korrigiere ich die Namen des Dialog-Objektes hilfsweise so:
Code: Alles auswählen
Sub dialogaufrufen(Dialogname)
'Dim oAuswahl 'Dialog, wie er in der Bibliothek gespeichert ist.
REM Als erstes wird die Bibliothek geladen.
REM Wenn der Dialog in einer Bibliothek auf Anwendungsebene gespeichert ist
REM statt im Dokument, muss GlobalScope.DialogLibraries verwendet werden.
DialogLibraries.loadLibrary("Standard")
REM Holt die gesamte Bibliothek, nachdem sie geladen ist.
oStandard = DialogLibraries.getByName("Standard")
REM Holt den Dialog, wie er in der Bibliothek gespeichert ist.
REM Ich betrachte das Objekt als Dialogdefinition.
oAuswahlx = oStandard.getByName(Dialogname)
REM Erzeugt einen ausführbaren Dialog aus der Dialogdefinition.
oAuswahl = CreateUnoDialog(oAuswahlx)
REM ---- Namen des zuletzt aktiven Dialoges in die Tabelle "Start SV Tornesch / Beschreibungen" schreiben
oDatei = thiscomponent
oBlatt = oDatei.sheets("Beschreibung")
oZelle = oBlatt.getcellrangebyname("H22")
oZelle.string = Dialogname
if Dialogname = "Generationenschiessen" then
'...
und ändere das Makro für die Schaltfläche:
Code: Alles auswählen
Sub Mannschaften
'DialogLibraries.loadLibrary("Standard")
'oGenerationenDlg = CreateUnoDialog(DialogLibraries.Standard.Generationenschiessen)
'oGanzerName = oGenerationenDlg.getModel().getbyname("cbbGanzerName")
'Starter = oAuswahl.oGanzerName.GetItemText()
Starter = oAuswahl.getModel().getByName("cbbGanzerName").Text
MsgBox Starter
end sub
Das funktioniert nun wie gewünscht.
Da das momentan etwas 'hemdsärmelig' gelöst ist muss Du selbst den Code noch so ändern das Du für alle Dialogobjekte jeweils eine separate Objektvariable hast, diese Objektvariablen müssen dabei im Kopf des Moduls deklariert werden NICHT innerhalb eines Makros, sonst passiert was bei Dir passiert, nämlich:
Code: Alles auswählen
REM ***** BASIC *****
Dim oDocument
Dim oAuswahl '(A)
'...
Sub dialogaufrufen(Dialogname)
Dim oAuswahl 'Dialog, wie er in der Bibliothek gespeichert ist. '(B)
REM Als erstes wird die Bibliothek geladen.
REM Wenn der Dialog in einer Bibliothek auf Anwendungsebene gespeichert ist
REM statt im Dokument, muss GlobalScope.DialogLibraries verwendet werden.
DialogLibraries.loadLibrary("Standard")
REM Holt die gesamte Bibliothek, nachdem sie geladen ist.
oStandard = DialogLibraries.getByName("Standard")
REM Holt den Dialog, wie er in der Bibliothek gespeichert ist.
REM Ich betrachte das Objekt als Dialogdefinition.
oAuswahl = oStandard.getByName(Dialogname) '(C)
REM Erzeugt einen ausführbaren Dialog aus der Dialogdefinition.
oAuswahl = CreateUnoDialog(oAuswahl) '(D)
REM ---- Namen des zuletzt aktiven Dialoges in die Tabelle "Start SV Tornesch / Beschreibungen" schreiben
Erläuerung:
(A) - deklariert "oAuswahl" so das diese Variable für alle Makros des Moduls zur Verfügung steht
(B) - deklariert "oAuswahl" erneut, die erste Deklaration (A) ist damit hinfällig und "oAuswahl" wieder ohne Inhalt
(C)/(D) - sollten beispielsweise lauten:
Code: Alles auswählen
tmp = oStandard.getByName(Dialogname)
oAuswahl = CreateUnoDialog(tmp)
ich bin dabei garnicht vollends sicher das Dein Code formal falsch ist, aber diese Art mit einem Variablennamen für ein Objekt (bei einer Stringvariable etc. wäre das anders) zu hantieren ist zumindest riskant und ich würde dass vermeiden, denn es birgt allenfalls Risiken hat aber keinen erkennbaren Vorteil
Gruß
Stephan