ordinamento personalizzato



  • ordinamento personalizzato
    di Textomb data: 12/01/2013 12:00:35

    Salve a tutti cari amici.
    Il problema che oggi mi sta ammazzando è il seguente.
    Devo ordinare, usando VBA, una tabella in base ad un criterio personalizzato (che varia di volta in volta).
    Io uso l'istruzione CustomOrder.
    Ma appena gli passo il range in cui si trova l'elenco dei valori in base ai quali si deve effettuare l'ordinamento, va in errore.
    Cosa sto sbagliando e soprattutto come dovrei fare?
    di seguito l'estratto del codice...
    grazie mille in anticipo
     
    Application.AddCustomList ListArray:=OptionDip.Range("ab2:ab" & ProfOrder)
        Prospetto.Sort.SortFields.Clear
        Prospetto.Sort.SortFields.Add Key:=Range("b1:b" & prospettoRow), _
        SortOn:=xlSortOnValues, Order:=xlAscending, _
        CustomOrder:=OptionDip.Range("ab2:ab" & ProfOrder)
        With Prospetto.Sort
        .SetRange Range("b2:g" & prospettoRow)
        .Header = xlNo
        .apply
        End With
    



  • di Vecchio Frac data: 12/01/2013 14:16:18

    Questo è Excel > 2003...
    Comunque che errore ricevi? e su quale riga esattamente? a livello di AddCustomList o di Sort?
    OptionDip è un foglio?





  • di Textomb data: 12/01/2013 16:40:51

    Fermo restando il codice scritto precedentemente,
    se dopo CustomOrder, al posto di OptionDip.Range("ab2:ab" & ProfOrder), sostituisco la stringa con i valori ( nel mio caso sono: "IMBALLATORE, ADDETTO CONDUZIONE IMPIANTO, DISEGNATORE, CONTABILE"), funziona tutto benissimo.
    se invece cerco di passare l'inidirizzo con l'istruzione OptionDip.Range("ab2:ab" & ProfOrder), dove sono memorizzati i suddetti valori, mi da errore.
    l'errore è il n.13. Tipo non corrispondenete.
    Ho verifficato che se gli passo il numero dell'ordinamento personalizzato funziona.
    Cioè, se scrivo CustomOrder:=5 funziona.
    Ma il problema a questo punto è:
    Come faccio a sapere che nella lista degli ordinamenti personalizzati, il numero 5 corrisponde alla lista personalizzata che devo utilizzare?
    OptionDip è un foglio.
    Spero di essere stato chiaro...




  • di Vecchio Frac data: 12/01/2013 16:59:52

    Naturalmente ProfOrder è valorizzato (altrimenti ovviamente abbiamo un errore 13).
    Se CustomOrder vuole una stringa con valori, tu passagli quella :)

    Qualcosa tipo:
    scorro OptionDip.Range("ab2:ab" & ProfOrder), traspongo tutto in una stringa con valori separati da virgola, e passo tale stringa a CustomOrder. Meglio ancora, usiamo Transpose e Join, accoppiata vincente:

    CustomOrder:= join(worksheetfunction.transpose(OptionDip.Range("ab2:ab" & ProfOrder)), ",")





  • di Textomb data: 12/01/2013 17:49:41

    Niente da fare...
    non funziona.
    Ho scoperto che l'elenco di ordinamento personalizzato può ospitare al massimo 255 caratteri.
    Probabilmente l'errore è dato da questa ragione...
    In ogni caso provo ad intraprendere un'altra strada... e vedremo.
    grazie mille per i suggerimenti.



  • di Textomb data: 12/01/2013 20:35:08

    Errata corrige:
    il suggerimento avanzato da Vecchio Frac funziona come si deve.
    Forse Excel aveva bisogno di essere riavviato.
    Grazie mille.




  • di Vecchio Frac data: 12/01/2013 21:37:31

    Che sorpresa! Ottima notizia ^_^
    Very strange questo "riavvio" di Excel.





  • di Textomb data: 13/01/2013 10:30:34

    addirittura al riavvio la macchina ha elaborato la riparazione del sistema perchè si era corrotto qualcosa.
    credo che non gli sia piaciuta l'installazione di un software di compressione tipo zip scaricato dal web.
    Infatti al riavvio non l'ho trovato più nell'elenco dei programmi installati.
    probabilmente excel è incolpevole... Comunque meglio così.