Pagina 1 di 1

Come avviare macro al cambiamento di una cella

Inviato: sabato 10 settembre 2022, 16:32
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?

Re: Come avviare macro al cambiamento di una cella

Inviato: sabato 10 settembre 2022, 17:37
da patel
L'argomento è stato trattato più volte, bastava fare una ricerca
viewtopic.php?t=9959&hilit=contenuto+modificato

Re: Come avviare macro al cambiamento di una cella

Inviato: sabato 10 settembre 2022, 18:14
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?

Re: Come avviare macro al cambiamento di una cella

Inviato: sabato 10 settembre 2022, 20:28
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

Re: Come avviare macro al cambiamento di una cella

Inviato: domenica 11 settembre 2022, 11:23
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

Re: Come avviare macro al cambiamento di una cella

Inviato: mercoledì 19 ottobre 2022, 19:50
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