Date: prev next · Thread: first prev next last
2021 Archives by date, by thread · List index


Eine Klarstellung, die nach einem Einwand nötig ist:

Meine Idee zur Nutzung eines Makros zur Neuberechnung betrifft natürlich *alle* LO-Dokumente. Daher bedarf es einer Anpassung des Makros. Am einfachsten ist auch hier wieder die Fehlerbehandlung mit Resume Next, so dass bei z.B. Writer-Dokumenten keine Fehlermeldung kommt.

Wenn nur bestimmte Calc-Dokumente betroffen sein sollen, kann man z.B. eine benutzerdefinierte Dokumenteigenschaft einsetzen, sagen wir "Neuberechnen per Makro" mit booleschem Wert.

Dann könnte das Makro so aussehen:

Sub CalculateAll()
  Dim oDoc
  Dim oUDP  'Alle benutzerdefinierten Eigenschaften
  On Error Resume Next 'Kann ja nicht schaden
  oDoc = ThisComponent
  oUDP = oDoc.DocumentProperties.UserDefinedProperties
  If oUDP.PropertySetInfo.hasPropertyByName("Neuberechnen per Makro") Then
    If oUDP.getPropertyValue("Neuberechnen per Makro") Then
      oDoc.calculateAll()
    End If
  End If
End Sub

Ist alles ziemlich aufwändig. Der Weg, die ChangedOn-Funktion unter Verwendung der mittleren Makrosicherheit im Dokument zu speichern, ist auch im Hinblick auf die Verwendung in einem komplexen Firmennetz sicher erheblich einfacher.

Man sieht aber auch, wie flexibel LO eingesetzt werden kann.

Schöne Grüße
Volker

Am 07.06.21 um 19:37 schrieb Volker Lenhardt:
Kleine Schusseligkeit in Punkt 4:
Es muss heißen: ... - Achtung: in der Zeile unter der Liste LibreOffice auswählen, nicht die Datei - ...

Schöne Grüße
Volker

Am 07.06.21 um 17:57 schrieb Volker Lenhardt:
Hallo Boris,

für den Fall, dass du immer noch Schwierigkeiten mit dem Sicherheitszertifikat hast, kann ich dir eine nicht wirklich elegante, aber m.E. funktionierende Lösung auch mit hoher Makrosicherheit vorstellen.

1. Du löscht alle Makros in der Standard-Bibliothek des Dokuments, am besten durch Löschung der existierenden Module.

2. Du verwendest, wie von Werner Tietz vorgeschlagen, die Error-Behandlung, gespeichert in Meine Makros & Dialoge/Standard:

Function ChangedOn() As Date
   Dim oDoc
   Dim ChgDate
   On Error Resume Next
   oDoc = ThisComponent
   ChgDate = oDoc.DocumentProperties.ModificationDate
   'ChgDate ist leer, wenn das Dokument noch nie gespeichert wurde. In diesem Fall CreationDate nutzen
   If ChgDate.Year = 0 Then
     ChgDate = oDoc.DocumentProperties.CreationDate
   End If
   ChangedOn = DateSerial(ChgDate.Year, ChgDate.Month, ChgDate.Day)
End Function

3. Du erstellst ein Makro zur Neuberechnung aller Tabellen und speicherst es genau wie "ChangedOn" in Meine Makros ...:

Sub CalculateAll()
   ThisComponent.calculateAll()
End Sub

4. Du öffnest die Datei und verknüpfst über Extras/Anpassen/Ereignisse - Achtung: in der Zeile unter der Liste die Datei auswählen, nicht LibreOffice! - die Ereignisse "Ansicht wurde erzeugt" sowie "Dokument wurde gespeichert" jeweils mit dem Makro CalculateAll.

Wenn du die Datei öffnest, wird ChangedOn entweder leer sein oder aus einer anderen geöffneten Datei stammen. Es wird aber kein Fehler angezeigt. Wenn aber einen Augenblick später die Ansicht erzeugt ist, wird ThisComponent dann endlich diese Datei referenzieren, und alles wird sofort neu berechnet, woraufhin ChangedOn den korrekten Wert erhält. Den zwischenzeitlich falschen Wert wirst du nicht bemerken. Außerdem wird ChangedOn auch nach jedem Speichern aktualisiert.

Probier es einmal aus. Bei mir funktioniert es.

Schöne Grüße
Volker

Am 03.06.21 um 14:14 schrieb Boris Kirkorowicz:
Hallo,
um das Speicherdatum automatisiert in eine Zelle zu bekommen, habe ich
folgendes Makro (nicht von mir, sondern gefunden gekriegt) in mein
Calc-Dokument eingebaut:

REM  *****  BASIC  *****

Function ChangedOn() As Date

    Dim oSheet As Object
    Dim ChgDate As Variant

    oSheet = ThisComponent()

    ChgDate = oSheet.DocumentProperties.ModificationDate

'    ChgDate ist leer, wenn das Dokument noch nie gespeichert wurde. In diesem Fall CreationDate nutzen

    If ChgDate.Year = 0 Then
        ChgDate = oSheet.DocumentProperties.CreationDate
    End If

    ChangedOn = DateSerial(ChgDate.Year, ChgDate.Month, ChgDate.Day)

End Function

Dieses Makro nutze ich, indem ich es in der gewünschten Zelle mit
=CHANGEDON()
aufrufe.


Beim Öffnen des Tabellendokuments begegnet mir die Meldung:

BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: DocumentProperties.

Nach manuellem Aktualisieren mit [Strg]+[Shift]+[F9] ist allerdings das
Speicherdatum in der Zelle korrekt. Für die Funktion scheint es nicht
direkt schädlich zu sein, aber es stört natürlich, wenn man erst einmal
zwei Fenster (die Meldung und das Makro-Fenster) schließen muss, bevor
man arbeiten kann, und es macht keinen guten Eindruck, wenn man die
Tabelle weiterreicht.

Was bedeutet diese Meldung?
Wie lässt sich das abstellen?







--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.