Come avviare macro al cambiamento di una cella

Creare una macro - Scrivere uno script - Usare le API
Rispondi
il Luca
Messaggi: 60
Iscritto il: mercoledì 20 gennaio 2016, 17:27

Come avviare macro al cambiamento di una cella

Messaggio da il Luca »

Come da oggetto, cosa devo fare perchè al cambiamento del valore di una determinata cella, parta l'esecuzione di una macro?
Nel file di esempio, quando inserisco un valore in A1 come posso far partire la macro Main?
Allegati
Senza nome 1.ods
(11.39 KiB) Scaricato 46 volte
LibreOffice 6.0.7.3
Linux Ubuntu LTS 20.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Come avviare macro al cambiamento di una cella

Messaggio da patel »

L'argomento è stato trattato più volte, bastava fare una ricerca
viewtopic.php?t=9959&hilit=contenuto+modificato
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
il Luca
Messaggi: 60
Iscritto il: mercoledì 20 gennaio 2016, 17:27

Re: Come avviare macro al cambiamento di una cella

Messaggio da il Luca »

Ti ringrazio per la risposta, in realtà avevo provato a cercare nei vecchi thread ma o sono sfortunato o più probabilmente non bravo a cercare.
Comunque sia nel tuo link non ci sono soluzioni al caso che propongo perchè come dicevo la macro deve partire quando modifico A1.
L'evento "contenuto modificato" non è adatto a quello che chiedevo perchè se prima scrivo 99 in A2 e PIPPO in A3 poi metto 10 in A1, la macro chiaramente parte alla prima modifica e non quando modifico A1.
Hai qualche idea per aiutarmi?
LibreOffice 6.0.7.3
Linux Ubuntu LTS 20.04
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Come avviare macro al cambiamento di una cella

Messaggio da patel »

L'evento "contenuto modificato" è adatto, ma devi controllare che il target sia proprio la cella A1, se è A1 fai quello che devi fare, altrimento esci dalla sub.
Questo è un esempio

Codice: Seleziona tutto

Sub evento(Target) 
    If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then exit sub
    Sh = Target.getSpreadsheet()
    rng = sh.getCellRangeByName("A1")
    range2 = rng.queryintersection(Target.rangeaddress()) 
   If range2.RangeAddressesAsString = "" Then 
       Exit Sub
   Else  
       print "cella A1 modificata in " & rng.value
   End if
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Come avviare macro al cambiamento di una cella

Messaggio da patel »

Oppure

Codice: Seleziona tutto

Sub evento1(Target) 
If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then exit sub
oConv = ThisComponent.createInstance("com.sun.star.table.CellAddressConversion")
oConv.Address = Target.getCellAddress
If oConv.UserInterfaceRepresentation ="A1" then
   print "cella A1 modificata in " & Target.value
End if
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
nickGiard
Messaggi: 65
Iscritto il: lunedì 14 maggio 2012, 22:04

Re: Come avviare macro al cambiamento di una cella

Messaggio da nickGiard »

Salve Patel, la tua precisa risposta/e sottolinea come molti eventi sono scatenati da una serie indefinita di oggetti omogenei, sta al codice individuare quello che effettivamente è interessato.
Devo fare una piccola osservazione per le tue macro, usi delle funzioni che non appartengono al mio LibreOffice 7.1.8 (versione Still), come RangeAddressesAsString CellAddressConversion UserInterfaceRepresentation, dove le trovo ?
Non era più semplice e didattico usare la sempre presente proprietà string AbsoluteName e fare un veloce confronto tra stringhe?
Saluti Nicola
Nicola con LibreOffice 7.1 (x64) su Windows 11
Rispondi