letzte Änderung

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

Moderator: Moderatoren

Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: letzte Änderung

Beitrag von Toxitom »

Hey Tim,

also, grundsätzlich: VBA-Code ist nicht identisch mit AOO/LO Basic-Code, insbesondere, was die Objekte angeht!!!

Wenn Du mit OpenOffice/LibeOffice zukünftig arbeiten möchtest, solltest Du Dich intensiv mit dem Objektmodell von dem Programm beschäftigen (UNO).

Es gibt zwar einen Kompatibilitätsmodus und Dein Programm läuft bei mir einwandfrei (LibreOffice 5.3.x) - aber das ist immer nur ein Kompromiss!!

Bei Dir fehlt wahrscheinlich die Zeile

Code: Alles auswählen

  Option VBASupport 1  
ganz am Anfang des Moduls, die den Kompatibilitätsmodus aktiviert. Nur dann werden VBA-Syntax Ausdrücke überhaupt interpretiert - und - soweit möglich - umgesetzt.

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: letzte Änderung

Beitrag von Stephan »

Das VBS musst Du in OO über "com.sun.star.bridge.OleObjectFactory" ausführen, z.B.:

Code: Alles auswählen

Sub Main
Msgbox Format(GetFileDate("D:\daten.txt"),"dd.mm.yyyy hh:mm:ss")
End Sub

Function GetFileDate(PfadDatei As String)
oleService = createUnoService("com.sun.star.bridge.OleObjectFactory") 
WSH= oleService.createInstance("MSScriptControl.ScriptControl") 
WSH.Language = "VBScript" 
vbs=vbs+"set objFSO = CreateObject(""Scripting.FileSystemObject"")"+Chr(10) 
vbs=vbs+"set objFsoD = objFSO.GetFile("+CHR(34)+PfadDatei+CHR(34)+")"+Chr(10) 
vbs=vbs+"dTemp = objFsoD.DateLastModified" +Chr(10)
WSH.ExecuteStatement(vbs) 
GetFileDate = WSH.CodeObject.dTemp.Value
End Function

in LO ist das z.Z. nicht ganz in Ordnung, der Fehler ist gemeldet:
https://bugs.documentfoundation.org/sho ... ?id=117739


Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: letzte Änderung

Beitrag von Stephan »

Dein Programm läuft bei mir einwandfrei (LibreOffice 5.3.x)
habe ich garnicht gewusst das das in LO auch so geht, denn es ist ja kein eigentliches VBA.

In OO geht das nicht.


Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: letzte Änderung

Beitrag von Stephan »

Ich habe Apache-OpenOffice 4.1.6 auf meinem Rechner installiert. Demnach ist diese Option wohl nicht nur für LibreOffice.
Dann kann AOO an der Stelle mehr als ich dachte. Das muss aber eine neuere Funktion sein, früher hat das nicht funktioniert.
Die Variante mit oleService = createUnoService("com.sun.star.bridge.OleObjectFactory" funktioniert auch.
Ich würde diese Version auch bevorzugen. Der Grund ist das das eine spezielle API-Funktion für diesen Zweck ist, die sehr zuverlässig funktioniert, wohingegen die Ausführung von VBA nicht immer zuverlässig ist.
Schön wäre es noch, wenn man den Fehler abfangen kann falls eine Datei nicht existiert.
Füge am Anfang der Function ein:

Code: Alles auswählen

If not FileExists(PfadDatei ) Then 
GetFileDate = ""
Exit Function
End If
Ist es richtig, dass ich mit dem MSScriptControl.ScriptControl jedes beliebige Script erstellen und mit WSH.ExecuteStatement starten kann?
zumindest jedes VBS, ja.
Gibt es noch eine andere Möglichkeit mit den normalen Bordmitteln die letzte Änderung zu ermitteln?
z.B.:

Code: Alles auswählen

Sub Letzte_Aenderung()
msgbox FileDateTime("D:\Daten.txt")
end Sub

Gruß
Stephan
Antworten