Forum di Excel e VBA, per condividere esperienze e risolvere problemi su: Excel, Word, Access, Power Point, Microsoft Office, macro, Visual Basic e Visual Studio.
Problema Ordine Fogli... di cromagno data: 08/07/2015 13:01:41
Buongiorno a tutti
mi servirebbe una mano per capire cos'è che non funziona correttamente nell'ordinamento alfabetico dei fogli all'apertura di un file excel.
Premetto che non essendo "una cima" in VBA ho messo un codice trovato sul web e adattato alle mie esigenze (quindi, a mio parere questo codice si potrebbe "alleggerire").
Comunque tutto funziona a dovere, tranne per una cosa:
In pratica ogni foglio ha come nome quello di un telefilm, ma quando li ordina, il foglio con nome "iZombie" me lo mette alla fine, come se la "i" prima di "Zombie" non venisse considerata.
Qualcuno saprebbe spiegarmi il perchè?
Lascio il file in allegato ("Telefilm to Down - HELP")...
P.S.
I primi due fogli del file ("Resoconto" e "Tutti") non vengono inclusi nell'ordinamento per mia scelta.
Grazie in anticipo a chi risponderà
di Luca73 data: 08/07/2015 13:27:31
Ciao
il fatto è che l'ordine alfabetico si basa sulla codifica ASCII che segue il seguente ordine
! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ' a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
Lo stesso ordine che puoi verificare usando la formula =CODICE.CARATT(XX) dove XX è un numero che va da 33 in avanti.
Come noti le lettere minuscole stanno dopo le lettere maiuscole pertanto la "i" sta oltre la "Z".
Pertanto iZombi viene per ultimo perchè comincia con una lettera minuscola, non è che non tiene conto della "i".
Se vuoi fare un ordinamento senza tener conto se le lettere sono minuscole o maiuscole ti consiglio di modificare il codice nella maniera sotto riportata in modo da confrontare i caratteri considerati tutti uguali.
Ciao
Luca
If iFogli(A) < iFogli(B) Then
da modificare con
If Ucase(iFogli(A)) < Ucase(iFogli(B)) Then
di Vecchio Frac data: 08/07/2015 13:33:25
Accade per via dell'ordinamento del vettore iFogli().
Correggi la macro dell'evento open del Workbook affinchè l'ordinamento sia case-insensitive:
'raccolta dei nomi dei fogli in una matrice
For Each CL In Worksheets
iFogli(A) = LCase(CL.Name)
A = A + 1
Next
di Vecchio Frac data: 08/07/2015 13:34:27
Mentre scrivevo (e distratto da una telefonata) non ho visto che Luca ha già risposto.
La correzione secondo me va fatta proprio nell'array iFogli() ma potrei sbagliare.
di cromagno data: 08/07/2015 13:41:41
Grazie a entrambi per la celere risposta
In effetti era quello che pensavo ma non sapevo come aggirare il problema.
Appena possibile proverò ad utilizzare questa soluzione e vi farò sapere...
PERFECT di cromagno data: 08/07/2015 13:45:51
Funziona perfettamente
Ho utilizzato la soluzione di Luca ma son sicuro che anche quella di Vecchio Frac sia una valida alternativa.
Per risolvere problemi con excel/vba questo sito non ha rivali
Ciao ragazzi e grazie ancora.
di Luca73 data: 08/07/2015 13:50:58
Ciao
avevo pensato anche io a modificare il caricamento nell'array ma questo ti avrebbe creato problemi nella fase di ordinamento fogli in fase di richiamo del foglio per nome (anche se non ho verificato)
Worksheets(iFogli(A)).Move after:=Worksheets(1)
@ VF mi piace notare come io avrei confrontato sulle maiuscole e tu invece hai optato per le minuscole,
Ciao
di Vecchio Frac data: 08/07/2015 13:57:20
cit. " ti avrebbe creato problemi nella fase di ordinamento fogli in fase di richiamo del foglio per nome"
---> Forse sono stato superficiale nel controllo, ma non ho avuto problemi nel riordinamento.
cit. "io avrei confrontato sulle maiuscole e tu invece hai optato per le minuscole"
---> Non ci ho mai pensato, ma io confronto sempre sulle minuscole in effetti :)
di Vecchio Frac data: 08/07/2015 13:57:55
cit. "Per risolvere problemi con excel/vba questo sito non ha rivali "
---> +1 :)
di Luca73 data: 08/07/2015 14:05:09
Ciao
Cit "cit. " ti avrebbe creato problemi nella fase di ordinamento fogli in fase di richiamo del foglio per nome"
---> Forse sono stato superficiale nel controllo, ma non ho avuto problemi nel riordinamento. "
Sono io che ho commesso un errore di presunzione, pensando di conoscere un dettaglio di excel.
Ho ritenuto che i nomi dei fogli contemplassero minuscole e maiuscole invece per i nomi dei fogli non contano miniscole e maiuscole e il foglio "Foglio1" lo posso richiamare con un Sheets("FOGLIO1")....