Riferimento generico a foglio attivo
Hai un problema con Excel? 
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 |
Vuoi Approfondire?