Newsgroup: it.comp.lang.visual-basic
Titolo: VBA-EXCEL-NAMES

Ciao,
vorrei sapere se qualcuno di voi ha idea di come poter fare per
assegnare a un name Excel un valore, sto facendo una coppia di macro,
una che estrapola i names e li scrive su un nuovo xls (e funza),
l'altra dovrebbe leggere questa tabella e cambiare il nome che assegno
di fianco a quello vecchio...
Ecco il codice che si blocca:
        For Each objName In wkbSource.Names 
            objName.Name = wksOutput.Cells(lCount, 3).Value
            lCount = lCount + 1
        Next objName
In debug sulla riga che dovrebbe assegnare il nome mi da:
Automation Error
The object invoked has disconnected from its clients.
Qualcuno ha idea di come fare?
Grazie in ogni caso per l'attenzione :)
Saluti,
Giorgio

 ha scritto nel messaggio
news:3dff40f0...@news.edisontel.com...

Nel momento in cui hai errore, entra in debug e visualizza il valore di
lCount. Poi verifica che nella cella lCount,3 ci sia un valore valido
(tipicamente, non vuoto), e diverso da ogni nome precedentemente creato.
Per fare un bel lavoro, dovresti infatti anche verificare che il nome che
crei non esista già.
Ciao
Alberto

(tipicamente, non vuoto), e diverso da ogni nome precedentemente creato.
Ciao,
grazie per la risposta, il codice postato e' esemplificativo, per
darti un'idea:
        For Each objName In wkbSource.Names ''' Gather information
about the name.
            MsgBox (objName.Name)
            objName.Name = "Pippo"
 
            lCount = lCount + 1
        Next objName
Da lo stesso errore, quindi e' proprio un problema di "assegnazione",
quasi fosse protetto in scrittura 
objname.name
 o comunque non
prevedesse di veder cambiato il suo valore una volta assegnato...
Grazie, ciao,
Giorgio

 ha scritto nel messaggio
news:3dff46aa...@news.edisontel.com...

In primis, non ho idea di come sia definito ObjName, nè WkbSource, per cui
fatico a seguirti.
Però, ripeto che dovresti controllare quanto vale lCount quando si pianta.
Il codice che hai postato stavolta, infatti, si può piantare in due momenti
diversi:
- Al primo giro, e quindi effettivamente potrebbe essere un problema di
proprietà di sola lettura
- Al secondo giro, e quindi sarebbe un problema di duplicazione di nomi,
come dicevo nel mio primo post (anche perchè, se 'pippo' rimane costante a
tutti i giri...).
Senza avere questa informazione, non saprei proprio come proseguire il
discorso.
Ciao
Alberto

proprietà di sola lettura
Al primo giro, lo faccio girare con F8.
Grazie, ciao,
Giorgio

 Al primo giro, lo faccio girare con F8.
Dunque...
La proprietà Name dell'oggetto Excel.Name è impostabile da codice.
Occorre però che:
1) l'oggetto esista nella collection. Questo dovrebbe essere garantito dal
For Each all'inizio. Se non esiste, non entri neppure.
2) il nome sia univoco e non vuoto. Ma se mi dici che il nome "Pippo" non è
accettato neppure al primo giro...
Morale: non so cosa dirti. Magari verifica qual'è il nome dell'oggetto prima
dell'assegnazione (che non sia un nome predefinito, che magari è in qualche
modo protetto da Excel), o che il foglio non sia protetto o addirittura il
file in sola lettura.
Ciao
Alberto

file in sola lettura.
Nessuna di queste condizioni e' vera, file non protetto ne' in sola
lettura, i nomi usati non penso contino ;).
Vabbe', grazie lo stesso, ciao!
Giorgio


Forse il nome č anche key della collection, quindi non si cambia.
Puoi lavorare di Add e Remove
For Each objName In wkbSource.Names
    wkbSource.Names.Add wksOutput.Cells(lCount, 3).Value, objName.RefersTo
    objName.Delete
    lCount = lCount + 1
Next objName
ovviamente oltre alla proprietą RefersTo puoi copiare nel nuovo Name tutte
le proprietą del vecchio, l'IntelliSense ti guida alla grande.
--
Ciao, Silv:o)

 Forse il nome è anche key della collection, quindi non si cambia.
Ci avevo pensato anche io. Poi ho verificato nella documentazione, e il
.Name è una proprietà non associata al key della collection (che sembra non
esserci, visto che secondo la documentazione c'è solo l'Index)
Ciao
Alberto

le proprietà del vecchio, l'IntelliSense ti guida alla grande.
Mi sembra l'unica soluzione praticabile, mi suonava strano che non si
potesse semplicemente cambiare il nome, mortacci sua...
Faro' cosi' comunque, grazie!
Ciao,
Giorgio

potesse semplicemente cambiare il nome, mortacci sua...
Per la cronaca, funziona ;)
Grazie ancora, ciao,
Giorgio