Ma non si poteva fare una cosa piu' semplice del tipo "blocca riga evidenziata ecc.) anche per i comuni mortali che non sanno scrivere una macro?

----- Original Message ----- From: "Bart Aimar" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, June 09, 2006 7:00 PM
Subject: Re: [utenti] calc: 1 .ods, 2 tabelle, stessi dati, ordinati diversamente



Valerio Felici ha scritto:
Alle 01:17, venerdì 09 giugno 2006, Bart Aimar ha scritto:

discutiamola un po'....

Bene!

Sub Duplica_Sheet1 ' duplica un foglio e aggiunge un suffisso al nome dim iNumInser as integer oDoc = thisComponent sNomeSheet = oDoc.currentcontroller.activesheet.name oSheet = oDoc.currentcontroller.activesheet ''' Copy_PageStyle print_area= oSheet.getPrintAreas ' registro l'area di stampa


2.qui sopra: è necessario anche se si ricopia tutto il foglio?

Io ho copiato del codice che utilizzo per funzioni più complesse...
quindi può avere cose che non ti servono.
Ma intendi avere una sheet identica all'originale si!
Lo stile di pagina invece se lo tira dietro, ma la mia funzione
originale copiava anche fuori dal documento.


RepeatRows = oSheet.getTitleRows 'registro le righe da ripetere (intestazione colonna)


3. qui sopra: posso decidere quante righe costituiscono l'intestazione? potrei mettere una setTitleRows?
La riga sopra (come dice il commento) registra il numero di righe
impostato nella sheet di origine...
Più sotto poi utilizza il valore di questa variabile per impostare lo
stesso numero di righe sulla sheet duplicata. Ma se vuoi puoi impostarne
uno diverso.

PrintRepeatRows = oSheet.PrintTitleRows ' i parametri "optional" devono essere verificati nell'ordine ' in cui vengono passati!!
???
Il commento è riferito alle righe dopo...
 >> if isMissing (sSuffix) Then sSuffix = "_print" else sSuffix =
"_copia" end if sRaggrup = sNomeSheet & sSuffix If thisComponent.Sheets.hasByName(sNomeSheet & sSuffix) Then If thisComponent.Sheets.hasByName(_ sNomeSheet & sSuffix & "_bk") Then
 thisComponent.Sheets.removebyname(_ sNomeSheet &  sSuffix & "_bk")
end if oSheet = oDoc.Sheets.getByName(sNomeSheet & sSuffix) oSheet.Name = sNomeSheet & sSuffix & "_bk" end if

Questo ambaradan è inutilmente complesso per questo uso...
In realtà la sub originale poteva venir chiamata da situazioni diverse,
e le diverse situazioni potevano passare o meno dei parametri... che -
appunto - avevo constatato che andavano verificati nell'ordine...
Nel nostro caso il commento è superfluo... e avrei dovuto eliminarlo.
Forse c'è altro di superfluo... ma francamento in quel casino non tempo
ne voglia di ributtarmi in quel casino...
comunque funziona!  :-)

passiamo alla prossima :-)

Function Riordina_A (_ ColRior as integer, AscDesc as boolean)as variant ' Riordina l'elenco prezzi con criteri ' a scelta...

4. è possibile impostare più criteri di ordinamento? tipo la finestra
 di dialogo: per col. C, quindi per col. D....?

Non saprei... non ho mai provato... ma era passato qualcosa in lista...
ma non ricordo... so che avevo dato un consiglio stupido e mi avevano
subito smentito...

Forse qualcuno può aiutarci?


oLastCell = getLastUsedCell(oSheet) lcolEnd = oLastCell.Endcolumn lrowEnd = oLastCell.EndRow oMioRange = osheet.getCellRangeByPosition(0,1,lcolEnd,lrowEnd)

5. in fondo alla tabella ci sono commenti e schifezze varie, c'è un modo per determinare, anche interattivamente, il range di righe/colonne da riordinare?

Hai, hai... vedo che non era solo un mio problema... :-)

In UltimusFree avevo risolto mettendo un "segno", ovvero una riga di chiusura "che non deve essere camcellata mai!!!" In questa riga un testo "sempre_quello" nell'angolo in basso a sinistra dell'area da riordinare; la macro ricerca il testo e così individua l'area.

Non è molto elegante... e quella riga continuo a viverla con profonda
schizofrenia ...
Si tratta di una riga rosso fuoco piene di scritte minatorie che
promettono fulmini divini a chi la cancella... poi via macro a volte la
nascondo...  (per evitare che qualcuno la stampi)... poveri utenti!

E pensare che ho lavorato un po' per togliere quel codice e sostituirlo con getLastUsedCell... :-)

Comunque se ci sono idee migliori sono pronto alla modifica!

Riordina_A = lrowF
questa non l'ho capita: lrowF che valore dovrebbe avere? e che modo è
 di usare una funzione a sinistra dell'operatore di assegnazione?

Altro frammento di codice che non serve e confonde... :-)

Come avrai notato Riordina_A è una Function (non una sub)

La Function ha la caratteristica di restituire un valore, stivandolo in
una variabile con il nome stesso della function.

Pertanto, se dalla sub Main avessi scritto

lrowFinale = Riordina_A (2, true)

oltre ad eseguire il codice a valle la sub chiamante veniva informata del valore della riga finale...
Ma nel nostro caso non serve!

Intendo dire che se vuoi che un modulo restituisca qualcosa devi usare
una Function,
impostrare una variabile = nome_function,
e all'interno della function impostare il
nome_function = valore_elaborato

Function getLastUsedCell(oSheet as Object) Dim oCell As Object Dim ... zot...

ok, questa è funzionale ad una delle precedenti

Sempre che non ci siano i soliti, immancabili commenti a fine tabella... :-)

Comunque complimenti... vedo che sei riuscito a smontare il codice riga per riga!


ciao Bart

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Rispondere a