Pagina 1 di 1

[RISOLTO] Definire Area di celle (CTRL + F3)

Inviato: lunedì 17 settembre 2018, 12:05
da Logical Passion
Buongiorno,

premetto che la ricerca che ho effettuato non produce nessuna occorrenza per questo argomento

è possibile che una macro definisca un'area di celle (con "definire un'area di celle" intendo ottenere lo stesso risultato della procedura che in Calc si attiva con CTRL + F3)?

Dovrebbe (forse!) essere la procedura di cui si parla qui https://www.openoffice.org/api/docs/com ... cePosition ma non capisco come si metta in pratica quanto vi è scritto

Grazie

Re: Definire Area di celle (CTRL + F3)

Inviato: lunedì 17 settembre 2018, 17:16
da patel
prova questa

Codice: Seleziona tutto

sub definisciNome 
   rifa_nomearea ("Foglio1", "$G$10:$L$20" , "prova")
end sub

SUB rifa_nomearea (sSheet as string, sRange as string, sName as string)
   sPath = "$'" & sSheet & "'." & sRange
   oRanges = ThisComponent.NamedRanges
      oCellAddress = ThisComponent.Sheets.getByName(sSheet).getCellRangeByName("A1").getCellAddress()
   If oRanges.hasByName(sName) Then oRanges.removeByName(sName)
   oRanges.addNewByName(sName,sPath,oCellAddress,0)
end sub
se intendi imparare a programmare qui troverai molti esempi http://www.pitonyak.org/oo.php

Re: Definire Area di celle (CTRL + F3)

Inviato: lunedì 17 settembre 2018, 18:17
da Logical Passion
Funziona e svolge esattamente ciò che intendevo, non sembra però possibile definire un'area contenente celle discontinue.

A questo punto non so se indicare l'argomento come [RISOLTO] perchè ciò che ho chiesto mi è stato prontamente indicato (Grazie!) ma se cambio titolo probabilmente passa inosservato il discorso di area con celle discontinue.

Ringrazio Patel anche per il link agli esempi di pitonyak

Re: Definire Area di celle (CTRL + F3)

Inviato: lunedì 17 settembre 2018, 19:34
da unlucky83
Perchè con (CTRL + F3) riesci a definire area con celle discontinue?

Re: Definire Area di celle (CTRL + F3)

Inviato: martedì 18 settembre 2018, 0:50
da Logical Passion
Si, è possibile.

Nella finestra di dialogo che si apre premendo CTRL+F3, a sinistra del tasto per attivare la selezione tramite mouse, c'è un campo per l'inserimento testuale.
E' necessario digitare in esso, avendo l'accortezza di racchiuderla fra due parentesi, tutta la sequenza di sottoaree divise con il punto e virgola.

AreaDiscontinua($A$1:$B$2;$C$3:$D$4)
L'espressione viene accettata e ad una successiva apertura della finestra "Definisci Nomi" (CTRL+F3) il punto e virgola vengono sostituiti da un tilde.

La conferma che l'area disgiunta funzioni, oltre che essere accettata, è fornita dalla formula =CONTA.VUOTE(AreaDiscontinua) che restituisce il valore 8.

Oltre le due aree discontinue è necessario digitare direttamente il tilde ~ perchè l'inserimento con il punto e virgola non funziona (mistero!)

E' possibile aggiungere più aree su più fogli:
AreaDiscontinua($Foglio1.$A$1:$B$2~$Foglio1.$C$3:$D$4~$Foglio2.$E$5:$F$6). ---> =CONTA.VUOTE(AreaDiscontinua) restituisce il valore 12.

(testato fino a 7 fogli e 7 aree discontinue)

Re: Definire Area di celle (CTRL + F3)

Inviato: martedì 18 settembre 2018, 1:29
da unlucky83
Ottima spiegazione, non sapevo si potesse fare. Prova questa versione allora:

Codice: Seleziona tutto

sub definisciNome2
   rifa_discontinua ("provola2","($Foglio1.$B$15~$Foglio1.$B$30:$B$35)",ThisComponent)
end Sub

SUB rifa_discontinua (  sName as string,sRange as string, oDove As object)
'oDove può essere ThisComponet--> per nome a validità globale; può essere ThisComponent.Sheets(0) --> per nome valido solo nel primo foglio; etc...
   oRanges = oDove.NamedRanges
     If oRanges.hasByName(sName) Then oRanges.removeByName(sName)
  oCellAddress = ThisComponent.Sheets.getByindex(0).getCellRangeByName("A1").getCellAddress()
   oRanges.addNewByName(sName,sRange,oCellAddress, 0)
end Sub

Re: Definire Area di celle (CTRL + F3)

Inviato: martedì 18 settembre 2018, 8:14
da patel
Non si smette mai di imparare :super: :bravo:

Re: Definire Area di celle (CTRL + F3)

Inviato: martedì 18 settembre 2018, 9:55
da unlucky83
Grazie a questa discussione ho scoperto la grande potenzialità di NamedRanges, è possibile associarci anche il testo di una formula, ecco a cosa serve il terzo parametro, a gestire i riferimenti relativi delle funzioni suppongo.

https://wiki.openoffice.org/wiki/Docume ... med_Ranges

Re: Definire Area di celle (CTRL + F3)

Inviato: domenica 23 settembre 2018, 12:53
da Logical Passion
Buongiorno, mi scuso per aver tardato nel rispondere. Per alcuni versi fortunatamente, per altri meno, sono stato molto impegnato.

Ringrazio Unlucky per il codice da lui scritto, funziona e non ne avevo dubbi! Lo ringrazio anche per il complimento ricevuto, mi ha fatto molto piacere.
Sono infine lieto questa discussione sia stata spunto per la sua scoperta, anche se, francamente, per ora non capisco di cosa si tratti.

Ora modifico l'oggetto aggiungendo la spunta verde e la dicitura [RISOLTO]

Grazie, buona Domenica

Re: [RISOLTO] Definire Area di celle (CTRL + F3)

Inviato: domenica 23 settembre 2018, 13:19
da unlucky83
Per chiarire, si possono salvare in NamedRanges non semplicemente riferimenti a celle, ma anche formule. Usato in maniera opportuna potrebbe essere impiegato in alternativa all’utilizzo di celle di appoggio per fare i calcoli e forse anche per ridurre il testo di formule complesse altrimenti lunghissime
La wiki riporta questo esempio che cito in parte
xNamedRanges.addNewByName("ExampleName", "SUM(G43:G44)", aRefPos, 0);

// use the named range in formulas
xSheet.getCellByPosition(6, 44).setFormula("=ExampleName");
xSheet.getCellByPosition(7, 44).setFormula("=ExampleName");

Re: [RISOLTO] Definire Area di celle (CTRL + F3)

Inviato: domenica 23 settembre 2018, 13:30
da Logical Passion
(Fantastic)