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]