[Risolto]Eventi foglio per tutti i fogli

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

[Risolto]Eventi foglio per tutti i fogli

Messaggio da patel »

In un documento di calc con molti fogli è possibile assegnare in un colpo solo la stessa macro evento a tutti i fogli ?
Ultima modifica di patel il sabato 19 novembre 2016, 11:37, modificato 1 volta in totale.
-------------------
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
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Eventi foglio per tutti i fogli

Messaggio da Gaetanopr »

si può fare sia tramite un listener che tramite l'assegnazione diretta all'evento sul foglio, a quale sei interessato ? credo la seconda
Allegati
Eventi_Tutti_Fogli.ods
(8.77 KiB) Scaricato 137 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Eventi foglio per tutti i fogli

Messaggio da patel »

Ottimo funziona benissimo, ma dove le trovi queste soluzioni ?
-------------------
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
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Eventi foglio per tutti i fogli

Messaggio da Gaetanopr »

Ti spiego come ho fatto
1) ho ricercato tra i metodi del foglio dove già avevo inserito un evento e ho trovato il metodo getEvents
2) ho fatto Sh.getEvents.getElementNames per ricercare il nome esatto di ogni singolo evento assegnabile ai fogli e mi è uscita la seguente lista

Codice: Seleziona tutto

Array : T( 0 To 6 ) As string  
 
(0)       | string : "OnFocus"
(1)       | string : "OnUnfocus"
(2)       | string : "OnSelect"
(3)       | string : "OnDoubleClick"
(4)       | string : "OnRightClick"
(5)       | string : "OnChange"
(6)       | string : "OnCalculate


3) quindi ho ricercato l'evento OnChange facendo Sh.getEvents.getByname("OnChange) per capire come si struttura
4) E' venuta fuori la seguente struttura dati

Codice: Seleziona tutto

      Array : T( 0 To 1 ) As object  
 
(0)       | Structure : com.sun.star.beans.PropertyValue --> EventType                   "Script" 
(1)       | Structure : com.sun.star.beans.PropertyValue --> Script                      "vnd.sun.star.script:Standard.Module1.Ciao?language=Basic&location=document" 
e da lì basta creare la struttura tramite

Codice: Seleziona tutto

Dim PropoEv(1) As New com.sun.star.beans.PropertyValue
Se sai creare una struttura dati(piano piano sto imparando) puoi fare molte cose è solo questione di sapere dove cercare.

Prova a fare tutti i passaggi che ti ho elencato
Ciao
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Eventi foglio per tutti i fogli

Messaggio da patel »

Gaetanopr ha scritto:Ti spiego come ho fatto
1) ho ricercato tra i metodi del foglio dove già avevo inserito un evento e ho trovato il metodo getEvents
Grazie, ma io sono già bloccato alla prima, come si fa ?
-------------------
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
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Eventi foglio per tutti i fogli

Messaggio da Gaetanopr »

O tramite Proprietà di debug quindi in questo modo

Codice: Seleziona tutto

 msgbox ThisComponent.sheets(0).DBG_methods
oppure il miglior modo è usare Xray
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4020
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Eventi foglio per tutti i fogli

Messaggio da patel »

ok, ho fatto così

Codice: Seleziona tutto

Sub metodi
Dim  strArr() As String
Doc = ThisComponent
Sheet = Doc.Sheets(0)
s= Sheet.DBG_methods
strArr = Split(s,";")
For count = 0 To ubound(strArr) ' dimensione array
   Sheet.getCellByPosition(0, count).string = strArr(count)
Next
End Sub
Grazie di tutto
-------------------
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
Rispondi