Discussione:
A proposito di parentesi quadre...
(troppo vecchio per rispondere)
Mauro Gamberini
2010-12-21 16:02:42 UTC
Permalink
... no, non al posto di Range(), altra cosa.

Tutti(forse) sappiamo che non è possibile
modificare runtime la proprietà (Name) di un foglio
((Name) eh, non la proprietà Name).

Mi è capitato fra le mani un vecchio post di Roberto Restelli.
Provate questa:

Public Sub m()
Foglio1.[_CodeName] = "Pippo"
End Sub

o questa:

Public Sub m()
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("Foglio2")
With sh
.[_CodeName] = "Pluto"
End With
Set sh = Nothing
End Sub

Qui sotto alcuni commenti esplicativi di Roberto:

<Roberto>
Ufficialmente, non è possibile.
La proprietà "Worksheet.Name" (come illustrato nel mio esempio di codice
inviato in precedenza) agisce sulla proprietà "Name" che vedi nella finestra
delle proprietà, ed è in lettura/scrittura (cioè puoi leggerlo e
modificarlo).
Per accedere alla proprietà "(name)" nella finestra delle proprietà bisogna
agire sulla proprietà "Worksheet.CodeName" che invece è a sola lettura
(quindi significa che puoi leggerla ma non cambiarla).

Esiste però una possibilità! Esiste una proprietà di interfaccia per
l'oggetto "Worksheet" che è nascosta, ed è la proprietà "_CodeName". Tale
proprietà è nascosta perchè viene utilizzata normalmente solo da Excel (per
esempio quando in modalità di progettazione con il VisualBasicEditor si
interviene tramite finestra delle proprietà su "(name)" ).


Passiamo quindi a gestire il codice in maniera *speciale* utilizzando metodi
e proprietà che potrebbero non essere ufficialmente supportati e che
potrebbero variare con le diverse versioni di Excel. Parliamo quindi di
utilizzare un "trucco", e questo è il codice:
===================
'...
Dim oFoglio As Worksheet


Set oFoglio = ActiveWorkbook.Worksheets.Add
oFoglio.[_CodeName] = "Pippo"
'...
====================


Le parentesi quadre sono obbligatorie in quanto il carattere underscore
("_") non è utilizzabile nella normale sintassi di Visual Basic (e VBA).
Attenzione in ogni caso all'utilizzo di questo codice: formalmente non è
supportato! :-p

</Roberto>


Così, tanto per ricordare..... ;-)

---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
Scossa
2010-12-22 13:08:47 UTC
Permalink
On 21 Dic, 17:02, "Mauro Gamberini"
Post by Mauro Gamberini
... no, non al posto di Range(), altra cosa.
Tutti(forse) sappiamo che non possibile
modificare runtime la propriet (Name) di un foglio
((Name) eh, non la propriet Name).
Mi capitato fra le mani un vecchio post di Roberto Restelli.
Public Sub m()
    Foglio1.[_CodeName] = "Pippo"
End Sub
CUT

Grazie Mauro!!!

Bye!
Scossa
r
2010-12-22 13:24:41 UTC
Permalink
On 21 Dic, 17:02, "Mauro Gamberini"

volevo scrivere una pagina sul sito con tutte ste cose un po'
strane ... qualcosa tipo questa http://spreadsheetpage.com/index.php/oddities

quindi prendo nota ... magari un giorno :-)
grazie
r
Mauro Gamberini
2010-12-22 16:47:46 UTC
Permalink
volevo scrivere una pagina sul sito con tutte ste cose un po'
strane ... qualcosa tipo questa
http://spreadsheetpage.com/index.php/oddities

quindi prendo nota ... magari un giorno :-)
******************************

Amo quell'uomo!
Ho tutti i suoi libri.
A proposito di libri,
ho trovato interessante
questo:

http://www.amazon.com/Professional-Excel-Development-Definitive-Applications/dp/0321508793/ref=dp_ob_title_bk


---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/

Loading...