von Klemens77 » Sa, 29.08.2009 10:56
Ich hatte das Problem jetzt ein bischen aus den Augen verloren, und meine Zugangsdaten musste ich auch erst wieder besorgen, also sorry, dass ich erst jetzt auf die antworten reagiere:
Ich fürchte ich habe mich da schlecht ausgedrückt. Ich hatte gehofft meine Probleme mit dem Macro nur kurz zu beschreiben, jetzt sehe ich aber, dass das so nicht geht.
Mein Macro soll folgendes machen
1) auf der Tabelle "Einstellungen" einen Dateipfad einlesen (Position 1,3)
2) öffnen der calc-Datei mit dem Namen (Gruppen.ods), welche sich im Dateipfad von 1) befindet
3) Inhalt der Gruppen.ods in ein Globales Feld schreiben, und Gruppen.ods danach schliessen
4) Dialog mit zwei Kombinationsfeldern öffnen
5) bei der Auswahl des ersten Kombinationfeldes (Hauptgruppe) die Auswahlmöglichkeiten des 2.Kombinationsfeldes aktualisieren (Nebengruppe)
die Datei Gruppe.ods hat dabei den Aufbau:
Hauptgruppe A, Nebengruppe A1, Nebengruppe A2, Nebengruppe A3, ....
Hauptgruppe B, Nebengruppe B1, Nebengruppe B2,...
Hauptgruppe C, ...
Mein Problem ist nun, dass bis zu Punkt 4) scheinbar alles klappt, aber wirklich nur scheinbar. Denn der Teil des Makros, der die Untergruppe aktualisieren soll, funzt nicht. Irgendwie funktioniert das schliessen der Gruppen.ods nicht. Und damit hängt dann alles. Ich kann die Gruppen.ods ja auch nicht via kill abschiessen, denn da schliesse ich mein macro genau so. Andererseits funktioniert alles, wenn ich die Tabelle "Gruppe" in die calc-DAtei stecke in der auch das Makro steht, ich also keine zusätzliche Datei öffnen muss. Das ist aber leider wichtig, dass die Gruppen in einer eigenen Datei stehen
HILFE!
nun der Code:
Code: Alles auswählen
OPTION EXPLICIT
Dim oHauptfenster as Object
Dim oFenster as Object
Dim TagBlatt as Object
Dim Einstellungsblatt as Object
Dim GruppenBlatt as Object
Dim aktuelleZeile as integer
Dim GruppenDaten(0 To 200, 0 To 200)
Sub Main
' Hauptprogramm
Dim EinstellungsDoc as Object
Dim Einstellungspfad as string
Dim Inhalt as string
Dim PfadGruppendatei as string
Dim oURLGruppe as string
Dim n as integer
Dim oGruppenDoc as object
TagBlatt = ThisComponent.Sheets.getByName("TAG")
Einstellungsblatt = ThisComponent.Sheets.getByName("Einstellungen")
PfadGruppendatei = Einstellungsblatt.getCellByPosition(1,3).string & "/" & "Gruppen.ods"
oURLGruppe = ConvertToURL(PfadGruppendatei)
oGruppenDoc = starDeskTop.loadComponentFromURL(oURLGruppe, "_hidden", 0, Array())
GruppenBlatt = oGruppenDoc.Sheets.getByName("Gruppe")
aktuelleZeile=0
Do
aktuelleZeile = aktuelleZeile +1
n=0
Do
n = n + 1
GruppenDaten(n-1,aktuelleZeile-1)=GruppenBlatt.getCellByPosition(n-1,aktuelleZeile).string
Loop Until GruppenBlatt.getCellByPosition(n-1,aktuelleZeile).string=""
Loop Until GruppenBlatt.getCellByPosition(0,aktuelleZeile+1).string=""
'schliessen der Gruppen Datei
oGruppenDoc.close(false)
'Hauptfenster laden
Zeige_Hauptfenster
End Sub
Sub Zeige_Hauptfenster
Dim oHauptgruppe, oUntergruppe as Object
Dim nGruppe as integer
Dim Gruppen as Object
dim inhalt, sstring as string
DialogLibraries.LoadLibrary("Standard")
oHauptfenster = CreateUnoDialog(DialogLibraries.Standard.Aufruf)
oHauptgruppe = oHauptfenster.getControl("HauptBox")
oUntergruppe = oHauptfenster.getControl("UnterBox")
oHauptgruppe.Text = "Hauptgruppe wählen"
oUntergruppe.Text = ""
nProjekt=0
Do
nGruppe = nGruppe + 1
inhalt = GrppenDaten(0,nGruppe-1)
oHauptgruppe.AddItem(inhalt,nGruppe - 1)
sstring=GruppenDaten(0,nGruppe)
Loop until sstring=""
oHauptfenster.execute
End Sub
Sub UnterGruppeAktualisieren
Dim n, aktuelleGruppe as integer
Dim oGruppe, oUntergruppe as Object
Dim shalt as String
Dim inhalt as string
oHauptgruppe = oHauptfenster.getControl("HauptBox")
oUntergruppe = oHauptfenster.getControl("UnterBox")
aktuelleGruppe = 0
if oHauptgruppe.Text="Hauptgruppe wählen" then
'es wurde noch nichts gewählt, Unterliste löschen
oUntergruppe.removeItems(0,oUntergruppe.itemCount)
Else
'Unterliste löschen
oUntergruppe.removeItems(0,oUntergruppe.itemCount)
'richtige Gruppe finden
aktuelleGruppe = 0
Do
aktuelleGruppe = aktuelleGruppe +1
inhalt = GruppenDaten(0,aktuelleGruppe-1)
Loop Until (oHauptgruppe.Text=inhalt) OR (inhalt="")
'Unterprojekte eintragen
n=0
Do
n = n +1
inhalt = GruppenDaten(n,aktuelleGruppe-1)
shalt=GruppenDaten(n+1,aktuelleGruppe-1)
oUntergruppe.AddItem(inhalt,n - 1)
Loop Until shalt=""
oUntergruppe.Text=oUntergruppe.model.StringItemList(0)
End If
End Sub
Ich hatte das Problem jetzt ein bischen aus den Augen verloren, und meine Zugangsdaten musste ich auch erst wieder besorgen, also sorry, dass ich erst jetzt auf die antworten reagiere:
Ich fürchte ich habe mich da schlecht ausgedrückt. Ich hatte gehofft meine Probleme mit dem Macro nur kurz zu beschreiben, jetzt sehe ich aber, dass das so nicht geht.
Mein Macro soll folgendes machen
1) auf der Tabelle "Einstellungen" einen Dateipfad einlesen (Position 1,3)
2) öffnen der calc-Datei mit dem Namen (Gruppen.ods), welche sich im Dateipfad von 1) befindet
3) Inhalt der Gruppen.ods in ein Globales Feld schreiben, und Gruppen.ods danach schliessen
4) Dialog mit zwei Kombinationsfeldern öffnen
5) bei der Auswahl des ersten Kombinationfeldes (Hauptgruppe) die Auswahlmöglichkeiten des 2.Kombinationsfeldes aktualisieren (Nebengruppe)
die Datei Gruppe.ods hat dabei den Aufbau:
Hauptgruppe A, Nebengruppe A1, Nebengruppe A2, Nebengruppe A3, ....
Hauptgruppe B, Nebengruppe B1, Nebengruppe B2,...
Hauptgruppe C, ...
Mein Problem ist nun, dass bis zu Punkt 4) scheinbar alles klappt, aber wirklich nur scheinbar. Denn der Teil des Makros, der die Untergruppe aktualisieren soll, funzt nicht. Irgendwie funktioniert das schliessen der Gruppen.ods nicht. Und damit hängt dann alles. Ich kann die Gruppen.ods ja auch nicht via kill abschiessen, denn da schliesse ich mein macro genau so. Andererseits funktioniert alles, wenn ich die Tabelle "Gruppe" in die calc-DAtei stecke in der auch das Makro steht, ich also keine zusätzliche Datei öffnen muss. Das ist aber leider wichtig, dass die Gruppen in einer eigenen Datei stehen
HILFE! :(
nun der Code:
[code]
OPTION EXPLICIT
Dim oHauptfenster as Object
Dim oFenster as Object
Dim TagBlatt as Object
Dim Einstellungsblatt as Object
Dim GruppenBlatt as Object
Dim aktuelleZeile as integer
Dim GruppenDaten(0 To 200, 0 To 200)
Sub Main
' Hauptprogramm
Dim EinstellungsDoc as Object
Dim Einstellungspfad as string
Dim Inhalt as string
Dim PfadGruppendatei as string
Dim oURLGruppe as string
Dim n as integer
Dim oGruppenDoc as object
TagBlatt = ThisComponent.Sheets.getByName("TAG")
Einstellungsblatt = ThisComponent.Sheets.getByName("Einstellungen")
PfadGruppendatei = Einstellungsblatt.getCellByPosition(1,3).string & "/" & "Gruppen.ods"
oURLGruppe = ConvertToURL(PfadGruppendatei)
oGruppenDoc = starDeskTop.loadComponentFromURL(oURLGruppe, "_hidden", 0, Array())
GruppenBlatt = oGruppenDoc.Sheets.getByName("Gruppe")
aktuelleZeile=0
Do
aktuelleZeile = aktuelleZeile +1
n=0
Do
n = n + 1
GruppenDaten(n-1,aktuelleZeile-1)=GruppenBlatt.getCellByPosition(n-1,aktuelleZeile).string
Loop Until GruppenBlatt.getCellByPosition(n-1,aktuelleZeile).string=""
Loop Until GruppenBlatt.getCellByPosition(0,aktuelleZeile+1).string=""
'schliessen der Gruppen Datei
oGruppenDoc.close(false)
'Hauptfenster laden
Zeige_Hauptfenster
End Sub
Sub Zeige_Hauptfenster
Dim oHauptgruppe, oUntergruppe as Object
Dim nGruppe as integer
Dim Gruppen as Object
dim inhalt, sstring as string
DialogLibraries.LoadLibrary("Standard")
oHauptfenster = CreateUnoDialog(DialogLibraries.Standard.Aufruf)
oHauptgruppe = oHauptfenster.getControl("HauptBox")
oUntergruppe = oHauptfenster.getControl("UnterBox")
oHauptgruppe.Text = "Hauptgruppe wählen"
oUntergruppe.Text = ""
nProjekt=0
Do
nGruppe = nGruppe + 1
inhalt = GrppenDaten(0,nGruppe-1)
oHauptgruppe.AddItem(inhalt,nGruppe - 1)
sstring=GruppenDaten(0,nGruppe)
Loop until sstring=""
oHauptfenster.execute
End Sub
Sub UnterGruppeAktualisieren
Dim n, aktuelleGruppe as integer
Dim oGruppe, oUntergruppe as Object
Dim shalt as String
Dim inhalt as string
oHauptgruppe = oHauptfenster.getControl("HauptBox")
oUntergruppe = oHauptfenster.getControl("UnterBox")
aktuelleGruppe = 0
if oHauptgruppe.Text="Hauptgruppe wählen" then
'es wurde noch nichts gewählt, Unterliste löschen
oUntergruppe.removeItems(0,oUntergruppe.itemCount)
Else
'Unterliste löschen
oUntergruppe.removeItems(0,oUntergruppe.itemCount)
'richtige Gruppe finden
aktuelleGruppe = 0
Do
aktuelleGruppe = aktuelleGruppe +1
inhalt = GruppenDaten(0,aktuelleGruppe-1)
Loop Until (oHauptgruppe.Text=inhalt) OR (inhalt="")
'Unterprojekte eintragen
n=0
Do
n = n +1
inhalt = GruppenDaten(n,aktuelleGruppe-1)
shalt=GruppenDaten(n+1,aktuelleGruppe-1)
oUntergruppe.AddItem(inhalt,n - 1)
Loop Until shalt=""
oUntergruppe.Text=oUntergruppe.model.StringItemList(0)
End If
End Sub
[/code]