Author Topic: Openoffice.org - CALC - Associare una macro alla variazione di una cella  (Read 6666 times)

0 Members and 1 Guest are viewing this topic.

Offline mg

  • Semi Esperto
  • **
  • Posts: 167
  • Karma: 24
  • Novizio
Scrivo abitualmente macro in visual basic all'interno di openoffice.org - CALC.

Tali macro in genere le assoccio o alla pressine di un bottone o ad un'icona.
Ora avrei la necessità che ogni qual volta che un insieme di celle viene modificato la macro venga eseguita.
Tipo se nella cella A7 ho il valore 10, se seleziono la cella e scrivo 15 e premo invio una macro deve essere richiamata.

Qualcuno ha un suggerimento?

Grazie
MArco

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Scrivo abitualmente macro in visual basic all'interno di openoffice.org - CALC.

Tali macro in genere le assoccio o alla pressine di un bottone o ad un'icona.
Ora avrei la necessità che ogni qual volta che un insieme di celle viene modificato la macro venga eseguita.
Tipo se nella cella A7 ho il valore 10, se seleziono la cella e scrivo 15 e premo invio una macro deve essere richiamata.

Qualcuno ha un suggerimento?

Grazie
MArco

io lo avrei, ma per VBA di excel. Non so se funziona pure in open.
Praticamente si deve ricorrere all'evento on-change del foglio. L'evento passa come parametro "target"  la cella che è stata cambiata. A questo punto esgui dei controlli sul parametro target, verifichi cioè che la cella cambiata è una tra quelle che ti interessano e quindi fai eseguire le macro che ti interessano.
ciao
« Last Edit: 30 October , 2011, 11:21:53 AM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline mg

  • Semi Esperto
  • **
  • Posts: 167
  • Karma: 24
  • Novizio
Grazie Afazio per la risposta. Riporto di seguito il codice da utilizzare.

Code: [Select]

Global oCell(0)
Global oListener

'La seguente procedura MAIN deve essere aggiunta all'evento di apertura del documento tramite strumenti/personalizza
Sub Main
add_cell_listener("A1") 'richamo la procedura che crea il listener, posso richiamarla su tutte le celle che mi interessano
risposta = MsgBox("Parte il listener, l'ascoltatore", 48, "Attenzione")
'all'apertura del file compare semrpe questo messaggio
End Sub

Sub add_cell_listener (cell_id As String)
Dim oSheet
Dim i As Integer
i = ubound(oCell) + 1
Redim Preserve oCell(i)
oSheet = thisComponent.Sheets("Sheet1")
oCell(i) = oSheet.getCellRangeByName(cell_id)
oListener = CreateUnoListener( "CELL_", "com.sun.star.chart.XChartDataChangeEventListener" )
oCell(i).addChartDataChangeEventListener(oListener)
End Sub

Sub CELL_chartDataChanged
risposta = MsgBox("FUNZIONA!!!", 48, "Attenzione") 'inserire il richamo ad una aprticolare macro che gestirà le azioni da eseguirsi alla variazione della cella A1
end sub

« Last Edit: 31 October , 2011, 11:10:37 AM by mg »

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: Openoffice.org - CALC - Associare una macro alla variazione di una cella
« Reply #3 on: 31 October , 2011, 12:55:20 PM »
Grazie Afazio per la risposta. Riporto di seguito il codice da utilizzare.

Code: [Select]

Global oCell(0)
Global oListener

'La seguente procedura MAIN deve essere aggiunta all'evento di apertura del documento tramite strumenti/personalizza
Sub Main
add_cell_listener("A1") 'richamo la procedura che crea il listener, posso richiamarla su tutte le celle che mi interessano
risposta = MsgBox("Parte il listener, l'ascoltatore", 48, "Attenzione")
'all'apertura del file compare semrpe questo messaggio
End Sub

Sub add_cell_listener (cell_id As String)
Dim oSheet
Dim i As Integer
i = ubound(oCell) + 1
Redim Preserve oCell(i)
oSheet = thisComponent.Sheets("Sheet1")
oCell(i) = oSheet.getCellRangeByName(cell_id)
oListener = CreateUnoListener( "CELL_", "com.sun.star.chart.XChartDataChangeEventListener" )
oCell(i).addChartDataChangeEventListener(oListener)
End Sub

Sub CELL_chartDataChanged
risposta = MsgBox("FUNZIONA!!!", 48, "Attenzione") 'inserire il richamo ad una aprticolare macro che gestirà le azioni da eseguirsi alla variazione della cella A1
end sub



Funziona?
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline mg

  • Semi Esperto
  • **
  • Posts: 167
  • Karma: 24
  • Novizio
A meno di errori nel copia incolla nel mio foglio di Calc funziona perfettamente.

Ciao
Marco

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24