Condividi:        

[Excel] VBA e ordinare celle relativamente in 2007

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] VBA e ordinare celle relativamente in 2007

Postdi ghisirds » 24/12/07 23:07

Salve,
con Excel 2003 ero abituato a selezionare con una macro l'intervallo di celle che volevo ordinare e poi scrivere qualcosa del genere:

Rows("2:2").Select
Range("F2").Activate
Range(Selection, Selection.End(xlDown)).Select

Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Key2:=Range("k1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
Ora, con la versione 2007, la faccenda è un po' cambiata, e la stessa operazione viene registrata più o meno così, nonostante io la registri utilizzando i riferimenti relativi:

Range("F2").Select
ActiveCell.Rows("1:1").EntireRow.Select
ActiveCell.Activate
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Statistiche").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Statistiche").Sort.SortFields.Add Key:=ActiveCell. _
Offset(0, 2).Range("A1:A351"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Statistiche").Sort.SortFields.Add Key:=ActiveCell. _
Offset(0, 10).Range("A1:A351"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Statistiche").Sort
.SetRange ActiveCell.Range("A1:BQ351")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Il problema è, come si può vedere, che la macro è piena di riferimenti sia al foglio che alla quantità di righe selezionate, ma non va bene perchè il loro numero può variare (il numero di righe selezionate indendo).

Come si può adattare quindi questa macro per far si che ordini le righe selezionate indipendentemente dalla loro quantità e dal foglio in cui si trovano?

Grazie mille

__________________
Eliminati link pubblicitari
Anthony
ghisirds
Utente Junior
 
Post: 32
Iscritto il: 07/04/07 13:13

Sponsor
 

Re: [Excel] VBA e ordinare celle relativamente in 2007

Postdi Anthony47 » 29/12/07 01:23

Premetto che non ho excel2007, quindi vado a “sentimento”.

Intanto ti chiederei se hai provato a eseguire sul 2007 il codice pensato per il 2003; infatti dovrebbe essere garantita la compatibilita’ all’ indietro.

Poi, i trucchi per aggirare gli ostacoli potrebbero essere:
-l’ uso di Activesheet al posto di ActiveWorkbook.Worksheets("Statistiche")
-il calcolo del range da te selezionato (ad es. Sel = Selection.Address messo dopo la tua Range(Selection, Selection.End(xlDown)).Select) e l’ uso di questo risultato (o di una sua successiva elaborazione) al posto dei range fissi.
Infine sara’ certamente utile anche verificare sull’ help on-line la sintassi dei comandi, per capire come puoi manipolare il codice.

E’ un po’ poco, lo so, e spero arrivino altri contributi. Se trovi il tempo facci sapere l’ evoluzione.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] VBA e ordinare celle relativamente in 2007

Postdi ghisirds » 01/01/08 18:29

Anthony47 ha scritto:Premetto che non ho excel2007, quindi vado a “sentimento”.

Intanto ti chiederei se hai provato a eseguire sul 2007 il codice pensato per il 2003; infatti dovrebbe essere garantita la compatibilita’ all’ indietro.

Poi, i trucchi per aggirare gli ostacoli potrebbero essere:
-l’ uso di Activesheet al posto di ActiveWorkbook.Worksheets("Statistiche")
-il calcolo del range da te selezionato (ad es. Sel = Selection.Address messo dopo la tua Range(Selection, Selection.End(xlDown)).Select) e l’ uso di questo risultato (o di una sua successiva elaborazione) al posto dei range fissi.
Infine sara’ certamente utile anche verificare sull’ help on-line la sintassi dei comandi, per capire come puoi manipolare il codice.

E’ un po’ poco, lo so, e spero arrivino altri contributi. Se trovi il tempo facci sapere l’ evoluzione.

Ciao.


Grazie intanto.
La compatibilità comunque c'è, ho usato anche il vecchio codice e funziona.
solo che il nuovo ha delle funzionalità in più che vorrei riuscire a sfruttare, tipo la possibilità di poter ordinare le celle per un numero maggiore di 3 criteri, limite che era presente nella versione 2003.
Provo comunque a modificare il codice come mi hai indicato e vediamo cosa ne viene fuori.
Grazie intanto
Ciao
ghisirds
Utente Junior
 
Post: 32
Iscritto il: 07/04/07 13:13

Re: [Excel] VBA e ordinare celle relativamente in 2007

Postdi ghisirds » 06/01/08 20:21

Ho provato così:

Codice: Seleziona tutto
Public Sub Ordina_Click()

Dim selezione

    Range("F2").Select
    ActiveCell.Rows("1:1").EntireRow.Select
    ActiveCell.Activate
    Range(Selection, Selection.End(xlDown)).Select
   
selezione = Selection.Address
   
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=selezione, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:=selezione, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:=selezione, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:=selezione, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    With ActiveSheet.Sort
        .SetRange selezione
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
End Sub


Il problema è che mi da questo errore:

errore di run-time '1004':
errore definito dall'applicazione o dall'oggetto


Hai idea come risolvere?
Grazie ancora
Ciao
ghisirds
Utente Junior
 
Post: 32
Iscritto il: 07/04/07 13:13

Re: [Excel] VBA e ordinare celle relativamente in 2007

Postdi Anthony47 » 08/01/08 03:12

Non dici su quale istruzione ti da’ errore, ma immagino che sia sulla prima ActiveSheet.Sort.SortFields.Add che mi sembra quanto meno “monca”.

Ripeto che non ho excel 2007, quindi vado a spanne.
Prova a sostituire l’ intero blocco che comincia dopo ActiveSheet.Sort.SortFields.Clear e finisce prima del With ActiveSheet.Sort con queste istruzioni:

Codice: Seleziona tutto
Righe = Selection.Rows.Count
ActiveSheet.Sort.SortFields.Add Key:=Activecell.offset(0,0).range("A1:A" & Righe), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:= Activecell.offset(0,1).range("A1:A" & Righe), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:= Activecell.offset(0,2).range("A1:A" & Righe), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:= Activecell.offset(0,3).range("A1:A" & Righe), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= xlSortNormal


Questo dovrebbe fissare le chiavi di ordinamento su A (istruzione offset(0,0)), B (istruzione offset(0,1)), C (istruzione offset(0,2)) e D (istruzione offset(0,3)); se non e’ quello che ti serve cambia gli offset (il secondo numerino, cioe’ la colonna).

Credo che debba anche cambiare questa
.SetRange selezione
in
Codice: Seleziona tutto
.SetRange Range(selezione)


Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] VBA e ordinare celle relativamente in 2007

Postdi ghisirds » 17/01/08 09:43

Scusa il ritardo, ma sono riuscito a collaudarla solo stamattina... VA VA!
Sembra funzionare tutto!
Ora ci farò un pesante collaudo..
Grazie mille
Ciao
ghisirds
Utente Junior
 
Post: 32
Iscritto il: 07/04/07 13:13


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] VBA e ordinare celle relativamente in 2007":


Chi c’è in linea

Visitano il forum: Nessuno e 49 ospiti