Modul per Makrobefehl löschen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Modul per Makrobefehl löschen

Beitrag von erikafuchs »

Hallo Leute!
Kann man per Makrobefehl ein Makromodul löschen? Ich habe dazu nichts gefunden - außer: in VBL scheint das zu gehen.
Pit
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Modul per Makrobefehl löschen

Beitrag von Toxitom »

Hey Pit,

ja, kannst Du.

Befehl:

Code: Alles auswählen

GlobalScope.BasicLibraries.getByName("<NameDerBibliothek>").removebyName("<NameDesModuls>")
Aber Achtung! Auch danach ist das Zeug alles noch im Speicher. An sich müsstest Du danach LO schliessen (dadurch wird der Speicherinhalt zurückgeschrieben ins Profil - und nun ist auch das gelöschte Modul wirklich weg) und danach neu starten.

Falls Du das Modul (und somit den Inhalt) - nur ersetzen willst - replaceByName(). Aber auch da kann es zu lustigen Effekten kommen;)

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Modul per Makrobefehl löschen

Beitrag von erikafuchs »

Toxitom hat geschrieben: Di, 19.01.2021 20:06 Aber Achtung! Auch danach ist das Zeug alles noch im Speicher. An sich müsstest Du danach LO schliessen
Das ist kein Problem. Es ist ja so, dass immer, wenn meine Nutzer 10 Aufgaben gerechnet haben (oder so), die komplette Datei gespeichert wird - damit nichts verloren geht. Es gab sonst immer das Gejammere "ich habe jetzt soviele Aufgaben gerechnet und die sind jetzt alle weg!". Die Datei ist aber 775kB groß - und das dauert halt einen Moment. In meinem Rechentrainer sind aber einige Module, die die/der Schüler/in nicht braucht (Das sind Optionen für Lehrer/innen: RechenDuell, die Tests), die würde ich beim Erstellen der Schülerdateien gerne löschen - dann ist der Rechentrainer schon mal nur noch 714kB groß - vielleicht geht das da schon ein Bisschen schneller.
Bei dieser Gelegenheit: Eigentlich müsste ich nur eine der 7 Sheets des Rechentrainers speichern - da sind die Daten drin. Gibt es u.U. eine Möglichkeit, nur diesen Sheet zu speichern und nicht die ganze Datei? (Soll ich dafür einen neuen Threat aufmachen?).
Grüße Pit
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Modul per Makrobefehl löschen

Beitrag von erikafuchs »

Ich komme da nicht weiter:

Mein "Rechentrainer" hat zwischenzeitlich ziemlich viele Optionen und ich möchte ihn, je nach Nutzung etwas verschlanken.
Die verschiedenen Rechentrainer, z.B. die Testversion oder das Rechenduell werden aus der Vorlagendatei Rechentrainer.ots erstellt.
Ich hab etwas gesucht und zusätzlich zu Thomas' Code ein Seite von Andrew Pitonyak mit den entsprechenden ausführlicheBeschreibungen gefunden:
https://flylib.com/books/en/4.290.1.156/1/

Der Code:
dim NamenArray()
NamenArray=Array("NeuerRT", "Lehrer", "Test", "Kursdateien", "Duell")
NamenArray=GlobalScope.ThisComponent.BasicLibraries.getByName("Rechentrainer").getElementNames()
for n=0 to 4
if GlobalScope.ThisComponent.BasicLibraries.getByName("Rechentrainer").hasbyName(NamenArray(n)) then
GlobalScope.ThisComponent.BasicLibraries.getByName("Rechentrainer").removebyName(NamenArray(n))
end if
next
funktioniert soweit. Die Bibliothek "Rechentrainer hat allerdings ein Passwort. Der Code funktioniert sogar nach einem Schließen und Wiederöffnen der Datei, wobei, wie ich vermute, der Passwortschutz wiederhergestellt wird.
Erstelle ich allerdings eine Vorlagendatei und führe beim Start den Code aus, erfolgt eine Fehlermeldung, die Datei stürzt ab und nach dem Öffnen ist die gesamte Bibliothek weg.
Also habe ich gedacht, probiere ich es mit der Aufhebung des Passwortschutzes, wie beschrieben:
print GlobalScope.ThisComponent.BasicLibraries.isLibraryPasswordProtected("Rechentrainer")
GlobalScope.ThisComponent.BasicLibraries.verifyLibraryPassword("Rechentrainer","*****")
print GlobalScope.ThisComponent.BasicLibraries.isLibraryPasswordVerified("Rechentrainer")
Zunächst erhalte ich die Meldung "true" - die Bibliothek hat also ein Schutz. Dann öffnet sich aber der Makroeditor und zeigt einen Laufzeitfehler in der zweiten Zeile "unbekannt. Interner Fehler $(arg1)". Da der Makroeditor angezeigt wird, nehme ich an, dass also der Passwortschutz aufgehoben ist. Die dritte Zeile wird also nicht mehr ausgeführt. Was mache ich falsch? hat jemand eine Idee?
Pit
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Modul per Makrobefehl löschen

Beitrag von Stephan »

Code: Alles auswählen

GlobalScope.ThisComponent.BasicLibraries '...
ist Unfug, denn "Globalscope" verweist auf die zentralen Makrobibliotheken und "ThisComponent" indirekt auf die Makros im aktuellen Dokument, es geht nur entweder das Eine oder das Andere:

Code: Alles auswählen

GlobalScope.BasicLibraries '...
ThisComponent.BasicLibraries '...


Gruß
Stephan
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Modul per Makrobefehl löschen

Beitrag von erikafuchs »

Hallo Stefan,
vielen Dank, wieder was dazugelernt .... hilft aber nicht (eigentlich). . Ich habe zudem den Code so abgeändert, dass der Schutz nur aufgehoben wird, wenn er auch vorhanden ist:
if not ThisComponent.BasicLibraries.isLibraryPasswordVerified("Rechentrainer") then
ThisComponent.BasicLibraries.verifyLibraryPassword("Rechentrainer","****")
end if
...Ich bekomme weiter die gleiche Fehlermeldung.
Irgendwas ist falsch an meiner Zeile "ThisComponent.BasicLibraries.verifyLibraryPassword("Rechentrainer","****")". Auf obengenannter Seite steht dazu:
Modul3.jpg
Modul3.jpg (23.93 KiB) 2303 mal betrachtet
Ich schreibe "(eigentlich)", weil ich jetzt festgestellt habe, dass meine Module auch gelöscht werden, wenn der Passwortschutz nicht aufgehoben wird - das hätte ich nicht vermutet - aber ok, es funktioniert!.
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Modul per Makrobefehl löschen

Beitrag von erikafuchs »

Tja - zu früh gefreut. Aus meiner Vorlagendatei wird einwandfrei eine Rechentrainer Datei erstellt, die Module und auch die ungenutzten Tabellenblätter werden auch gelöscht. Das Kennwort der Makrobibliothek funktioniert aber nicht mehr!
Antworten