Cambiare nome ad un foglio
Hai un problema con Excel? 
Cambiare nome ad un foglio
di Mangusta (utente non iscritto) data: 12/03/2013 21:37:39
Ciao a tutti! oggi volevo sapere se era possibile cambare il nome ad un foglio di lavoro preciso.
Mi spiego meglio : aprendo editor vba c'è il nome del foglio di lavoro ed a fianco un ulteriore nome esempio
Foglio1(casa)
ora voglio sapere se è possibile cambiare il nome al Foglio1 qualsiasi nome abbia.
Spero essere stato chiaro
di totygno71 data: 12/03/2013 21:42:05
Cambia (name) ^_^
di Vecchio Frac data: 12/03/2013 22:34:18
Attenzione, il nome dell'oggetto foglio non è il nome di riferimento di quell'oggetto foglio.
Ogni foglio ha una proprietà .Name (che corrisponde al testo della linguetta del foglio per capirci) ed è il testo che nella finestra progetti compare tra parentesi. Ma ogni foglio ha un nome di codice (.CodeName) che non si può impostare direttamente (o meglio, in progettazione sì ma non in esecuzione). Ed è il nome che compare fuor delle parentesi.
Es:
Foglio1 (Foglio1) in questo caso coincidono
Apri l'editor di codice (Alt-F11)
Premi Ctrl-R per la finestra progetti.
Clicca sul Foglio1.
Premi F4 per accedere alla finestra della proprietà.
Dove vedi la prima voce, (Name), cambia il valore proposto con per esempio pippo.
Ora nella finestra progetti compare
pippo (Foglio1)
Nel codice da adesso puoi riferirti a questo oggetto indifferentemente così:
Sheets("Foglio1")....
oppure
pippo....
Esercizio per te: cosa succede se in Excel cambi il nome al foglio1, cioè rinomini la scheda (linguetta) del foglio1?
Prova e fai sapere :)
di Mangusta (utente non iscritto) data: 15/03/2013 20:13:41
Allora la macro qui sotto funziona correttamente : modifica il nome del foglio2
Sub CambiaNome()
Worksheets("Foglio1").Name = "pippo"
End Sub
io vorrei però riferirmi non al nome della linguetta del foglio che cambia ma a .CodeName
voglio dire : qualunque nome abbia il foglio che corrisponde a .CodeName Foglio1 deve avere il nome di pippo
di Vecchio Frac data: 15/03/2013 20:58:26
cit. me stesso: "Ma ogni foglio ha un nome di codice (.CodeName) che non si può impostare direttamente (o meglio, in progettazione sì ma non in esecuzione)"
Se trovo il modo di farlo programmaticamente te lo dico di sicuro (ma non credo si possa fare).
di Vecchio Frac data: 15/03/2013 21:08:37
Questa soluzione sembra interessante. Vi prego di segnarvela per usi futuri :)
In Excel non è permesso cambiare il .CodeName di un foglio tramite il codice, ma solo utilizzando la finestra Proprietà nell'IDE. Comunque questa riga funzionerà se si ha "accesso programmatico" al codice (Macro dal menu Strumenti, quindi protezione per aprire la finestra di dialogo Protezione Macro; nella scheda Fonti attendibili, fare clic per selezionare la casella di controllo e poi "Considera attendibile l'accesso al progetto Visual Basic per attivare l'accesso").
Soluzione rapida per cambia il CodeName al foglio attivo direttamente da VBA se il progetto è attendibile:
ActiveSheet.Parent.VBProject.VBComponents(ActiveSheet.CodeName).Name = "MyNewCodeName"
Il workaround finale è nel pezzo di codice allegato.
sub change_codename
Dim oVBComponent As Object
For Each oVBComponent In ActiveSheet.Parent.VBProject.VBComponents
' Besides looking at the Name you can also test on Type, etc. (not done here).
'
If (oVBComponent.Name = ActiveSheet.CodeName) Then oVBComponent.Name = "MyNewCodeName"
Next oVBComponent
end sub |
di HarryBosch data: 15/03/2013 21:08:39
... e aggiungo: mi spiegheresti il motivo per cambiare il codname da codice, che nessuno vede, nessuno utilizza, e di cui pochi sanno dell'esistenza? ^_^
Codname che io utilizzo sempre nei miei codici, liberando la fantasia dei mie colleghi nella modifica della linguetta (oltre ad essere molto più veloce come utilizzo, soprattutto se gli assegni un nome significativo)
di totygno71 data: 16/03/2013 09:29:42
Mi associo con HB
per quale motivo cambiare il codname? Semplice EserCCCicciolo o virtuosismo programmatico?
di Vecchio Frac data: 16/03/2013 10:42:13
A me preoccupa questa citazione:
"voglio dire : qualunque nome abbia il foglio che corrisponde a .CodeName Foglio1 deve avere il nome di pippo"
Perchè in effetti i nomi dei fogli (sia intesi come .Name cioè della linguetta, sia come .CodeName) sono univoci, non si possono avere fogli con riferimenti uguali. E quindi non mi è chiaro cosa Mangusta stia cercando di fare, o di capire :)
di Mangusta (utente non iscritto) data: 16/03/2013 21:55:02
Eccomi!! cerco di chiarirmi
voglio rinominare il foglio che ha come codename (foglio1) in pippo.
Non potendo sapere quale nome abbia (in linguetta) so però che al 90 % si parla del codename Foglio1
esempio (non so che si chiama prova)
foglio1(prova)
diventa
foglio1(pippo)
di Vecchio Frac data: 17/03/2013 09:33:37
HarryBosch, tra le righe ma neanche poi tanto, ha già dato un valido motivo del perchè è opportuno riferirsi al CodeName nel codice:
cit. " Codname che io utilizzo sempre nei miei codici, liberando la fantasia dei mie colleghi nella modifica della linguetta"
Se nel codice ti riferisci sempre a Foglio1 invece che a Sheets("Foglio1") puoi stare tranquillo che agirai sempre e soltanto su quel foglio, qualunque sia il nome che l'utente (conscio oppure no) darà alla linguetta del foglio. Tra parentesi, ciò velocizza anche l'esecuzione del codice perchè non deve essere risolto un riferimento indiretto dall'interprete.
Inoltre lasci libertà all'utente di rinominare come meglio gli piace i suoi fogli senza fargli vedere un fastidioso messaggio tipo "Non puoi rinominare la scheda".
Poi, è vero che per le prove e gli esempi che si fanno qui si usa spesso Worksheet("Foglio1"), ma è appunto solo perchè si tratta di esempi; in produzione bisogna stare più attenti.
di Mangusta (utente non iscritto) data: 17/03/2013 19:52:40
Adesso ho capito! nel codice invece che scrivere
with sheets("Foglio1")
si deve scrivere
With Foglio1
ho provato e funziona !!! Grazie mille non lo sapevo!!
Vuoi Approfondire?