Riferimento generico a foglio attivo



  • Riferimento generico a foglio attivo
    di solarlem data: 22/07/2016 12:49:44

    Buongiorno,
    Ho registrato una macro (non so programmare in vba) e vorrei che funzionasse su tutti i documenti excel. Purtroppo nel codice compare il nome del documento ("Nome_documento") e anche il range delle celle ("A1:AI274").
    E' possibile mettere un riferimento generico all'excel attivo? E indicare una colonna intera?

    Grazie in anticipo
     
    ' buttami Macro
    '
    
    '
        Cells.Select
        ActiveWorkbook.Worksheets("Nome_documento").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Nome_documento").Sort.SortFields.Add Key _
            :=Range("D2:D274"), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Nome_documento").Sort
            .SetRange Range("A1:AI274")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub



  • di patel data: 22/07/2016 17:17:29

    seleziona il range o la colonna e lancia questa 
     
    Sub Macro2()
        ActiveSheet.Sort.SortFields.Clear
        ActiveSheet.Sort.SortFields.Add Key:=Selection.Cells(1, 1), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortTextAsNumbers
        With ActiveSheet.Sort
            .SetRange Selection
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    






  • di solarlem data: 27/07/2016 13:37:33

    Grazie per la risposta, funziona, ma mi per poterla utilizzare dovremmo migliorarla:

    - io vorrei ordinare non solo le celle della colonna selezionata, ma tutte le righe sulla base dei valori della colonna selezionata. Si può fare?

    - inoltre, la colonna sulla base della quale fare ordinare il foglio è sempre la stessa, la D, è possibile fare in modo che io non debba selezionarla?

    Grazie, se risolvo è un gran bel passo avanti per le mie procedure



  • di patel data: 27/07/2016 17:01:07

    prima parti di colonna e di svincolarti dal range delle celle ("A1:AI274"), ora non vuoi selezionare, non capisco cosa vuoi.
    Apri il registratore, fai quello che devi fare, chiudilo e poi sostituisci
    ActiveWorkbook.Worksheets("Nome_documento")
    con
    ActiveSheet





  • di solarlem data: 28/07/2016 10:28:40

    Grazie, ho risolto. Ho fatto come mi hai suggerito, ho registrato e poi modificato il codice inserendo ActiveSheet.
    Riguardo la colonna, intendevo che non volevo vincolarmi ad una lunghezza specifica (es: da D1 a D100), ma volevo che fosse utilizzata tutta la colonna D. Anche il foglio, non volevo dargli uno spazio determinato (es: A1:Z100), ma volevo che coprisse tutte le celle piene (nel codice ho indicato .SetRange Range("A2:Z4000") ).

    Inserisco qui il codice, grazie ancora.

     
    Sub Macro5()
    '
    ' Macro5 Macro
    '
    ' Scelta rapida da tastiera: Opzione+Cmd+e
    '
        Columns("D:D").Select
        ActiveSheet.Sort.SortFields. _
            Clear
        ActiveSheet.Sort.SortFields.Add _
            Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
            :=xlSortNormal
        With ActiveSheet.Sort
            .SetRange Range("A2:Z4000")
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub