Hallo Thomas,
Welcome back im Forum

.
Auch dir ein Danke schön für deine Antwort.
Den Text kannst du nun ganz normal bearbeiten (Suchen und Ersetzen - in Strings).
Da ich mal wieder zu Dumm bin den ReplaceDescriptor in diesem Falle richtig anzuwenden, habe ich das hiermit gelöst.
Code: Alles auswählen
sNewInhalt = FuncAcc.callFunction("SUBSTITUTE", array(sOldInhalt, "Maus", ""))
Den Code kannst du dann komplett zurückschreiben
Also Sinngemäß mit folgendem Code funktioniert das bei mir nicht.
Code: Alles auswählen
odoc.BasicLibraries.getByName( "Libname" ).getByName( "Modulname" ) = sCode
Das ergibt dann folgende Fehlermeldung:
Kein Zugriff auf Objekt.
Falsche Verwendung eines Objekts.
Höchstwahrscheinlich bin ich schon zu übermüdet um den Fehler zu erkennen und zu beseitigen.
Und deshalb habe ich das momentan so gelöst, das ich nach dem Ersetzen das dementsprechende Modul lösche und anschließend mit der ersetzten Änderung das Modul neu anlege. Der komplette Code steht hier am ende.
Aber das ganze hat ein paar "Fallen":
Ein Haken gibts wohl immer.
- Ist der Code insgesamt größer als 64.000 Byte (rund 60T Zeichen) - dann läuft das Auslesen ins Leere...
So viele werden es nicht. Im schlimmsten Falle ca. 6.000, und in der Regel ehern so um die ca. 1.320 Zeichen.
- Verschlüsselte Bibliotheken lassen sich nicht bearbeiten.
Das ist natürlich wichtig zu Wissen.
- In der IDE werden solche Änderungen nicht direkt angezeigt
Hatte ich auch schon festgestellt. Wenn ich also die IDE schon offen habe, und z.B. ein neues Modul via Makro angelegt hatte, so wird das neue Modul nicht sofort angezeigt. Erst wenn ich den Basic-Verwaltungsdialog aus Calc heraus aufrief, wurde das neue Modul angezeigt, welches ich dann von dort aus auch aufrufen kann.
Eine Ausnahme gibt es allerdings wie das neue Modul trotzdem sofort in der IDE angezeigt wird, man provoziert einen Fehler im Makro beim Modul anlegen. Aber das ist nicht schön, und muss ja auch nicht sein.
der Code ist geladen im Arbeitsspeicher - und wird erst durch einen "reload" Befehl neu geladen.
Auf was beziehst Du dich mit "reload", auf das "Neu laden" der Datei, das Makro erneut starten, oder der eben beschriebene Weg über Basic-Verwaltungsdialog?
Daher kann man zwar Änderungen so durchführen, nicht aber im laufenden Makro.
Da bin ich mir nicht sicher ob ich dich richtig versteh, sage aber trotzdem das es doch geht, siehe folgenden Code. Falls ich dich doch falsch verstanden habe, so sags mir.
Code: Alles auswählen
Sub SuchenErsetzen
oFunctionAccess = createunoservice("com.sun.star.sheet.FunctionAccess")
sOldInhalt = ThisComponent.BasicLibraries.getByName("Standard").getByName("Module3")
sNewInhalt = oFunctionAccess.callFunction("SUBSTITUTE", array(sOldInhalt, "Maus", ""))
oLib = ThisComponent.BasicLibraries.getByName("Standard")
If oLib.hasByName("Module3") then
oLib.removeByName("Module3")
end if
oLib.insertByName("Module3", sNewInhalt)
ThisComponent.store()
end sub
Gruß
balu