LibreOffice alternatief voor Excel => strFileFullName = ThisWorkbook.FullName

In een werkgroep van vrijwilligers hebben slechts een paar mensen Excel.
Anderen gaan nu met het rapportage formulier dus werken met LibreOffice Calc, dat is al geïnstalleerd.
Het is mij gelukt om de Excel VBA zo te veranderen dat alles ook werkt onder LibreOffice met de originele Excel macro’s en VBA code.
Op 1 ding na.
Eerst moet ik nog even aangeven dat eigenlijk met 1 sheet gewerkt moet worden waarin gedetecteerd kan worden of met LibreOffice of met Excel gewerkt wordt want 2 verschillende versies wordt lastig.
Waar het momenteel op fout gaat is met het VBA stukje strFileFullName = ThisWorkbook.FullName
De bedoeling is namelijk dat na het invullen van het formulier alles wordt opgeslagen onder een unieke naam en daarna wordt terug gegaan naar het originele lege invulformulier.
In Excel wordt drive-folder-bestandsnaam opgevraagd met ThisWorkbook.FullName en in de string strFileFullName gezet waarna aan het eind van de macro de ingevulde sheet wordt afgesloten en de originele lege weer wordt geopend.
Maar omdat Calc dus deze instructie niet kent gaat het fout.
Is er en zo ja welke is de corresponderende instructie of set van instructies om hetzelfde te bereiken.
Dus het LibreOffice Calc alternatief voor ThisWorkbook.FullName

Wij zijn allemaal vrijwilligers bezig met een energietransitie in onze wijk en moeten gaan inventariseren hoe het met de woningen gesteld is en waar aandachtspunten zijn.

Bij voorbaat mijn dank voor hulp,
Groet, Bob

Ik krijg het idee dat hier de oplossing zit. De oplossing vergt wel een andere werkwijze maar lijkt mij de zaak eenvoudiger te maken. Feitelijk is het formulier een sjabloon wat ingevuld moet worden.
Ik denk dat het zowel in Exel als in libreoffice eerst op geslagen moet worden en daarna kan het elke keer opnieuw geopend worden als een nieuw document. Het zal best kunnen dat Exel en LibreOffice iets anders omgaan met het idee van een sjabloon maar dat lijkt mij niet het grootste probleem.

Hay RPG :wink:, bedankt voor je antwoord.

Feitelijk is de manier waarop ik werk zo dat eerst de originele sheet weer geladen wordt en daarna de ingevulde afgesloten wordt dus grofweg op deze manier.

(VBA Excel zoals hij was, beetje strak onder elkaar gezet even)

Als er op de knop Opslaan wordt geklikt gebeurt onderstaande.

Eerst wordt de drive, pad en bestandsnaam opgeslagen in strFileFullName met het commando dat LibreOffice dus niet kent, ThisWorkbook.FullName

Excel kent dat dus wel.

Dan wordt gekeken of de in de hoofdsheet bepaalde Driveplus map voor opslag bestaan, zo niet dan wordt die aangemaakt (die info staat in cel F1.

Huidige ingevulde formulier wordt opgeslagen op de in de hoofdsheet bepaalde drive en map (info staat in cel P5)

Daarna wordt eerst met Workbooks.Open strFileFullName het originele formulier geopend.

Dat gaat dus fout omdat LibreOffice dat eerder commando niet kent.

Afsluiten van de ingevulde sheet gaat dan ook niet omdat de afhandeling stopt.

Ik ben geen grote kenner van VBA maar met het handboek van Win de Groot en internet ben ik er wel uit voor grote delen.

In Excel gaat dus alles feilloos.

Het voordeel van deze manier van werken is dat niet bekend hoeft te staan waar het originele formulier staat.

Private Sub CommandButton1_Click()

strFileFullName = ThisWorkbook.FullName

Application.DisplayAlerts = False

If Dir(Range(“F1:F1”), vbDirectory) = “” Then

MkDir (Range(“F1:F1”))

Else

End If

If Dir(Range(“P5:P5”), vbDirectory) = “” Then

MkDir (Range(“P5:P5”))

Else

End If

sNewFile = (Sheets(“Warmtescan Form”).Range(“P5”)) & (Sheets(“Warmtescan Form”).Range(“L9”)) & “.xlsm”

strsNewFile = sNewFile

ThisWorkbook.SaveAs Filename:=strsNewFile

Application.DisplayAlerts = True

MsgBox “Bestand " & strsNewFile & " opgeslagen!”

Application.ScreenUpdating = True

Workbooks.Open strFileFullName

ThisWorkbook.Close SaveChanges:=False

End Sub

Ik heb nu een (voorlopige?) oplossing maar die heef het nadeel dat je op een andere manier moet opgeven waar het originele formulier zich bevind.

Omdat er haast was heb ik er voor gekozen dat dit dan maar op dezelfde locatie moet komen als waar de resultaten komen.

Minder flexibel en meer voorbereiding voor diegenen die er mee moeten werken en die niet altijd veel kaas gegeten hebben van alles.

Dat heb ik maar zo opgelost (het werkt nu wel in LibreOffice en Excel, maar de opgeslagen bestanden zijn daarna niet meer werkbaar voor Excel. Wel lezen maar opslaan lukt daarna niet meer).

Ik sla nu standaard vanuit LibreOffice op in het Excel 2007 en nieuwere .xlsx formaat maar lekker werkt het niet.

En elke gebruiker moet eerst in LibreOffice settings aanpassen en tussendoor steeds op waarschuwingen klikken.

Al met al niet zo makkelijk.

Uiteraard staat opnieuw in cel F1 drive en pad

Private Sub CommandButton1_Click()

Application.DisplayAlerts = False

If Dir(Range(“F1:F1”), vbDirectory) = “” Then

MkDir (Range(“F1:F1”))

Else

End If

strFileFullName = (Sheets(“Warmtescan Form”).Range(“F1”)) & "Warmtescan-test1.xlsm"

If Dir(Range(“P5:P5”), vbDirectory) = “” Then

MkDir (Range(“P5:P5”))

Else

End If

sNewFile = (Sheets(“Warmtescan Form”).Range(“P5”)) & (Sheets(“Warmtescan Form”).Range(“L9”)) & “.xlsm”

strsNewFile = sNewFile

ThisWorkbook.SaveAs Filename:=strsNewFile

Application.DisplayAlerts = True

MsgBox “Bestand " & strsNewFile & " opgeslagen!”

Application.ScreenUpdating = True

MsgBox strFileFullName

Workbooks.Open strFileFullName

ThisWorkbook.Close SaveChanges:=False

End Sub

Als met al blijft het lastig en niet zoals ik het wil voor de gebruikers.

Groet,

Bob

Het geheel kan ik niet begrijpen. Maar ik heb er aan toevoegd wat de feitelijke vraag is.

`REM ***** BASIC *****

Sub Main
If NOT GlobalScope.BasicLibraries.isLibraryLoaded(“Tools”) Then
GlobalScope.BasicLibraries.LoadLibrary(“Tools”)
End If
dim sFileName
sFileName = thiscomponent.url

’ This function work as far I know not on url but pathname
'FileNameoutofPath
'GetFileNameExtension
'GetFileNameWithoutExtension
'DirectoryNameoutofPath

'GetPathSeparator is een BASIC function

’ you can use this function from and to URL
'convertfromURL
'converttourl

'print sFileName
'print DirectoryNameoutofPath(convertfromURL(sFileName),GetPathSeparator)

sNewFileName = replace (sFileName,“01”,“RPGTTTT_01”)

call Mainopgenomenmacro(sNewFileName)

End Sub

sub Mainopgenomenmacro(sFileName)
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService(“com.sun.star.frame.DispatchHelper”)

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = “URL”
'args1(0).Value = “file:///home/romgro/Documenten/opof/data/calc2/calcvoorbeelden/omgaanmetVBA/sjabloon/LIbre_templatexxx01.ods”
args1(0).Value = sFileName ’ Hier wordt de macronaam ingevoegd
args1(1).Name = “FilterName”
args1(1).Value = “calc8”

dispatcher.executeDispatch(document, “.uno:SaveAs”, “”, 0, args1())

end sub`
Ik begrijp altijd dat het opslaan van gegevens in de twee verschillende programma’s nog al verschillend is.

StarBASIC waar LibreOffice mee werkt kent thiscomponent.URL
Gezien het feit dat je werkt met de file gegevens in een werkblad is het eenvoudigste wel om de filenaam met de CEL functie van een spreadsheet in je werkblad te plaatsen. Ik zou kiezen voor het doen van de meeste bewerkingen op de cel naam in het werkblad.
werkbladfunctie =CEL(“FileName”)
Dat voorkomt dat je allerlei BASIC functies moet leren en omschakelen tussen echte URL naar pad-namen en misschien weer terug. Ik zal enige extra informatie toevoegen

Wees je er wel van bewust wanneer je het opslaat met MSO extensies er dan geen macro’s worden opgeslagen en ik denk dat er ook geen macro’s worden opgeslagen wanneer er gebruik gemaakt wordt van vbasupport.

Je ziet het misschien ook wel dat het coderen in LibreOffice anders werkt en het is ook moeilijk om te schakelen van Excel naar LibreOffice.

Ik heb het geheel gelezen en heb er over over nagedacht maar zoals het nu geformuleerd is zie ik geen oplossing.
Wel heb ik de vraag:

  • Wat wordt er precies verzameld
  • Hoe wordt dit opgeslagen
  • het mooist zou het zijn als het het in een CSV kan

Heel erg bedankt voor alle reacties en moeite van je.
Intussen heb ik overleg gehad met de verantwoordelijke mensen van de werkgroep en die vinden het allemaal te lastig worden.
Er zitten mensen bij die NUL ervaring hebben met spreadsheets en dergelijke.
Gewoon invullen zou nog wel gaan, maar alles wat er verder omheen zit en dus bij al die vrijwilligers thuis zou moeten gebeuren zou te veel worden. Ook voor elke nieuwe vrijwilliger dus weer opnieuw.
Daarom is besloten en vandaag ook al gerealiseerd om dit vanuit Google te doen.
Het vergt dan niets aan installeren bij anderen en de resultaten van de ingevulde formulieren komen meteen in een spreadsheet.
Dus ik ben gestopt met verder tijd in lokale sheets en zo te stoppen.
Nogmaals bedankt voor het meedenken.
Groet, Bob