Ich grüße dich DPunch,
balu hat geschrieben:Ich würd sagen: Da irrst Du dich diesmal. Denn wenn ich BasicLibraries.loadLibrary auskommentiere, also verhindere, dann bekomme ich an der Stelle im Makro wo ich auf die Bibliothek zugreifen will folgende Fehlermeldung.
Dann tust Du dort anscheinend noch etwas anderes, als Du im Ausgangspost angedeutet hattest ("damit ich dann im weiteren Verlauf des Programms den Inhalt der BASIC-Module aus der bestehenden Datei in die leere Datei reinarbeiten kann")
Angedeutet hatte ich eigentlich nix, sondern lediglich anders beschrieben. Aber um das Missverständnis aus der Welt zu räumen, sag ich es jetzt mal etwas anders.
.... damit ich dann im weiteren Verlauf des Programms den Inhalt jedes BASIC-Modul einzeln aus der bestehenden Quelldatei in einen String einlese, und anschließend diesen String in die leere Datei in ein neu angelegtes BASIC-Modul reinschreibe. Und das mit jedem einzelnen BASIC-Modul aus der Quelldatei.
Verstehst Du es jetzt besser?
Hätte es gereicht wenn ich gesagt hätte: Ich kopiere die BASIC-Module?
Wäre diese Aussage dann aber nicht ein wenig verwirrend, da ich ja die Module nicht direkt kopiere so wie ein Tabellenblatt via SheetLink?
Der ganze Prozess ist aber auch etwas anders als in deinem Beispiel-Code, oder sehe ich das jetzt falsch?
Verzeih mir wenn meine Worte zur Zeit nicht immer eindeutig sind, aber das ganze Theater raubt mir noch den letzten Nerv. Und so langsam weiß ich schon selber nicht mehr ganz genau wie ich mich am besten ausdrücken soll.
denn das einfache Anlegen von Modulen und Schreiben von Code funktioniert wie erwartet auch ohne das Laden der Bibliothek:
Ja okay, dein Beispiel-Code funktioniert auch bei mir.
Code: Alles auswählen
Sub Main
oNewDoc = StarDesktop.loadComponentfromURL("private:factory/scalc", "_blank", 0, Array())
Do While NOT oNewDoc.BasicLibraries.hasByName("Standard")
Wait 10
Loop
oLib = oNewDoc.BasicLibraries.getByName("Standard")
s = "Sub HelloWorld"
s = s & Chr(13) & Chr(9) & "MsgBox (""Hello World"")"
s = s & Chr(13) & "End Sub"
oLib.insertByName("NeuesModul",s)
End Sub
Aber das ist doch nicht ganz das gleiche wie es bei mir ist.
Hier ist mein Code.
Code: Alles auswählen
...
myFPz(0).name = "Hidden"
myFPz(0).Value = False
oZiel = starDesktop.loadComponentfromURL("private:factory/scalc", "_blank", 0, myFPz())
Do While NOT oZiel.BasicLibraries.hasByName("Standard")
Wait 10
Loop
' oZiel.BasicLibraries.loadLibrary("Standard")
myFPq(0).name = "Hidden"
myFPq(0).Value = True
oQuelle = starDesktop.loadComponentfromURL(sQuelldatei, "_blank", 0, myFPq())
' oQuelle.BasicLibraries.loadLibrary("Standard")
'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' BASIC-Module aus der Quelldatei in die Zieldatei einarbeiten.
'
ModNamArray = oQuelle.BasicLibraries.getByName("Standard").ElementNames
myLib = oZiel.BasicLibraries.getByName( "Standard" )
For im = LBound(ModNamArray) to UBound(ModNamArray)
sInhalt = oQuelle.BasicLibraries.getByName("Standard").getByName(ModNamArray(im))
mylib.insertbyname(ModNamArray(im), sInhalt)
next im
...
Wie für dich unschwer zu erkennen ist, ist mein Schema doch etwas anders. Denn wenn ich den Erstellungsprozess starte, geht es um 3 Dateien.
1.
Das ist die Erstellungsdatei
2.
Die geladene und bestehende Quelldatei = oQuelle
3.
Die neue und leere Datei = oZiel
Vielleicht siehst Du ja jetzt ob ich irgendwo einen Fehler gemacht habe? Zur Sicherheit habe ich jetzt eine Beispieldatei angehängt, in der das zusammenhängende Makro drin ist. Im Makro habe ich, so wie hier zu sehen ist, das laden der Libraries auskommentiert.
Kurze Bedienungsanleitung:
-> Öffne die BASIC-IDE.
-> Im Tabellenblatt "Tabelle1" auf den Grünen Button klicken, es erscheint dann ein Dialog.
-> Im Dialog als erstes einen x-Beliebigen Namen eingeben, aber ohne Dateiendung (.ods).
-> Per Button eine Quelldatei auswählen die mindestens 1 BASIC-Modul beinhaltet.
-> Jetzt den Pfad auswählen wo gespeichert werden soll.
-> Nun kann auf den Button "Erstellen" geklickt werden.
-> Teil mir bitte schön mit, was Du erlebt und gesehen hast.
-> Du kannst dann natürlich auch daher gehen und das laden der Libraries wieder zulassen, und dann das ganze spielchen noch mal erneut starten.
Gruß
balu