ich habe eine LO-Dokument zum Einlesen von Matrikeldaten eines Vereinsmitglieds die nach einem Export aus einer DB-Anwendung auch als xlsx-Dokument vorliegen. Bei der Anwemdung gehe ich so vor, dass der Dateiname der Export-Datei im Matrikel-Dokument gespeichert ist und vom Makro eingelesen wird. Das Makro öffnet nun das Expot-Dokument im Hintergund und kopiert ausgewählte Bereiche in eigene Tabellen des Matrikel-Dokuments. Das Makro funktioniert technisch (habe dazu Code verwendet den ich vor längerer Zeit von mikele erhalten habe und mir schon sehr geholfen hat!).
Das Problem ist, dass nach Abschluss des Makros große Teile des Fensters geschwärtzt sind. Ich habe das Makro schrittweise gefahren und festgestellt, dass es mit dem Laden des Export-Dokuments zusammenhängt (oODS = StarDesktop.LoadComponentFromURL(sURL, "default", 0, args()).
So sieht der Code des Makros aus:
Code: Alles auswählen
sub Exportdatei
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDoc = thisComponent
'Dateiname einlesen (=Name)
oSheet = oDOC.sheets(0) 'Tabellennummer, bei 0 beginnend)
oView = oDOC.CurrentController
oZelle = oSheet.getCellRangeByName("M5") 'Zelle in der Dateinamen steht
Name=oZelle.string 'Name = Exportdateiname aus AVS
'Öffnen der ods-Datei
Dim args(1) as New com.sun.star.beans.PropertyValue
args(0).Name = "ReadOnly"
args(0).Value = True
'Aktuelles Verzeichnis einlesen und Datei basis.ods öffnen
sURL = thiscomponent.url
apfad = split(sURL,"/")
apfad(ubound(apfad)) = Name
sURL = convertToURL(join(apfad,"/"))
oODS = StarDesktop.LoadComponentFromURL(sURL, "default", 0, args())
'1: Auslesen Mitglied in ein Array der Daten
aDaten=oODS.Sheets(0).getCellRangeByName("B3:B12").getDataArray
'Schreiben der Daten in die aktuelle Datei (aDaten = Zwischenspeicher im Makro)
oDoc.Sheets(2).getCellRangeByName("B3:B12").setDataArray(aDaten)
'2: Auslesen Eingang in ein Array der Daten
aDaten=oODS.Sheets(1).getCellRangeByName("A1:F300").getDataArray
'Schreiben der Daten in die aktuelle Datei
oDoc.Sheets(3).getCellRangeByName("A1:F300").setDataArray(aDaten)
'Basis-Datei schließen
oODS.close(false)
'Rückkehr
dim args63(0) as new com.sun.star.beans.PropertyValue
args63(0).Name = "Nr"
args63(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args63())
dim args64(0) as new com.sun.star.beans.PropertyValue
args64(0).Name = "ToPoint"
args64(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args64())
end sub