Hello @schiavinatto, ho seguito il tuo consiglio, ho convertito la Macro in Function, però necessita sia della cella di origine che di destinazione tra i parametri.
I parametri vanno indicati come stringhe in quanto LibreOffice, se scrivo =QR_CODE(A1;F1)
valuta il contenuto delle celle A1 e F1 e non A1 come oggetto cella.
La funzione può essere inserita in 2 modi:
=QR_CODE(CELLA(“ADDRESS”;A1);CELLA(“ADDRESS”))
=QR_CODE(“A1”;“F1”)
Pro della 1^ soluzione rispetto la seconda :
1) La formula può essere copiata e trascinata nelle altre celle, con il secondo sistema deve essere ricopiata manualmente
2) La funzione si aggiorna anche variando o cancellando il contenuto nella colonna A, in quanto con la modifica la funzione si ricalcola, secondo sistema NO.
3) Può essere inserita su qualsiasi cella senza indicarne l'indirizzo di destinazione in quanto la funzione CELLA("ADDRESS") restituisce la cella dove la formula è inserita
La Function di contro rispetto la MACRO può risultare fastidiosa all’apertura del file, dove a seguito del ricalcolo di tutte le celle si assiste all’eliminazione e all’inserimento dei QR.
Function QR_CODE(cellaOr As String, CellDest As String)
dim document as object
dim dispatcher as object
Dim shell As Object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Doc = ThisComponent
Set shell = CreateObject("WScript.Shell")
sh = Doc.getcurrentcontroller.activesheet
For x = 0 To sh.drawPage.Count - 1
objX = sh.drawPage(x)
if objX.position.y = sh.getcellrangebyname(cellDest).position.y Then
If objX.position.x = sh.getcellrangebyname(cellDest).position.x Then
sh.drawPage.remove(objX)
exit for
End if
end if
next x
stringa = sh.getcellrangebyname(cellaOr).string
If stringa <>"" Then
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = CellDest
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
Shell.SendKeys stringa, True
Shell.SendKeys "+{TAB}", True ' shift + tab (Da Ok mi posiziono su annulla, altrimenti il pulsante OK NON FUNZIONA)
Shell.SendKeys "+{TAB}", True ' shift + tab (mi riposiziono su ok)
Shell.SendKeys "{ENTER}", True ' INVIO OK
dispatcher.executeDispatch(document, ".uno:InsertQrCode", "", 0, Array())
REM QUESTO CICLO MI PERMETTE DI DARE UN NOME AL QR CODE GENERATO SFRUTTANDO LA SUA POSIZIONE
For x = 0 To sh.drawPage.Count - 1
objX = sh.drawPage(x)
if objX.position.y = sh.getcellrangebyname(cellDest).position.y Then
objX.Name = stringa
end if
next x
end if
End Function
QR.ods (89.1 KB)