Definire con una macro il nome della cella dove è posizionato il cursore?

Anonimo
2011-05-09T11:41:31+00:00

Ho creato circa 30 fogli dove in alcuni di essi con una procedura ho definito varie celle.

Con questa procedura per esempio nel foglio a1 ho definito noz1(nome), quz1(valore), apz1(valore) ect e poi sempre nel foglio a1 ho definito noz2(nome), quz2(valore), apz2(valore). Di seguito nel foglio b1 ho definito noz3, quz3 ect.

In un foglio riassuntivo ho fatto una tabella sempre con questa procedura metto =’a1’!noz1, =’a1’!quz1 e di seguito per le altre.

Cambio ogni tanto la definizione di alcune celle in alcuni fogli e così mi posiziono sulla prima cella a sinistra e con ctrl z collegata alla macro rinomino nella stessa riga varie celle, questo invece di farlo manualmente.

La cosa strana è che nel foglio della tabella riassuntiva e precisamente nel riquadro in alto a sinistra dove mi dice il nome della cella dove è posizionato il cursore, se ci clicco non mi appaiono tutti i nomi che ho definito, anzi nemmeno uno c’è solo il nome della cella in cui si trova il cursore.

Mentre se vado nei fogli successivi tipo a1 vedo solo le definizioni di quel foglio a1 cioè noz1, quz1, noz2 .... ect, mentre se vado in b1 vedo solo le definizioni di noz3, quz3 e non noz1 o noz2.

Penso che qualcosa non vada bene nella procedura.

Di seguito metto parte del listato che ho utilizzato:

num è il foglio attivo tipo a1 dove definisco le celle noz1, quz1, apz1. Poi num diventerà b1 e poi c1 ect

nn è 1 nel caso di noz1, e poi diventa 2 per noz2 ect

With ThisWorkbook

        Set sh = .Worksheets(num)

    End With

    With sh

        .Names.Add Name:="noz" & nn, RefersTo:="=" & sh.Name & "!" & ActiveWindow.RangeSelection.Address

        .Names.Add Name:="quz" & nn, RefersTo:="=" & sh.Name & "!" & ActiveCell.Offset(0, 1).Address

        .Names.Add Name:="apz" & nn, RefersTo:="=" & sh.Name & "!" & ActiveCell.Offset(0, 9).Address

    End With

Spero di essermi spiegato

Grazie.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2011-07-12T09:24:17+00:00

Metto la routine, veramente un po' modificata comunque il succo è questo.

Questa mi chiede il numero che associa a noz, quz, vaz, voz, apz e poi mi nomima tutta la riga.

Il problema rimane sempre quello cioè mi mette il nome della cella tipo noz10 in quel determinato foglio ma non il nome del foglio cioè =#RIF!$B$10.

Questo codice che mi sono permesso di *normalizzare*, ti mette noz(n), quz(n), ecc. nella riga 1 del foglio attivo in *Excel fino alla versione 2003*, eliminando l'eventuale name già presente in quella cella:

Public Sub mNomi()

    'dichiaro le variabili

    Dim sName As String

    Dim vNum As Variant

    Dim vList() As Variant

    Dim lng As Long

    'inserisco il valore nella InputBox

    vNum = Application.InputBox("Introduci il foglio?")

    'controllo che nell'InputBox vega inserito

    'un valore numerico e controllo inoltre se

    'è stato premuto Annulla o non inserito un valore

    If vNum = False Or vNum = "" Or Not IsNumeric(vNum) Then Exit Sub

    'creo l'Array di voci

    vList = Array("noz", "quz", "vaz", "voz", "apz")

    'ciclo array e celle

    For lng = 0 To 4

        'creo la stringa per il Name

        sName = vList(lng) & vNum

        'nel foglio attivo

        With ActiveSheet

            'in caso di errore(in pratica l'errore

            'c'è se non vi è nessun Name presente)

            'passo all'istruzione successiva

            On Error Resume Next

            'elimino l'eventuale Name presente nella cella

            '(se non c'è, ho errore ma come detto passo

            'alla riga successiva)

            .Names(.Cells(1, lng + 1).Name.Name).Delete

            'aggiungo il nuovo Nane

            .Names.Add Name:=sName, RefersTo:="=" & _

                .Name & "!" & .Cells(1, lng + 1).Address(True, True)

        End With

    Next

 End Sub

*Per le versioni 2007 e 2010 di Excel*, devi modificare il codice, o meglio devi modificare i vari noz,quz, ecc, in quanto esistono colonne fino a XFD e quindi noz1, ad esempio, va in contrasto con quanto richiesto per la univocità dei nomi degli oggetti presenti sul foglio. Nel codice che ho postato è sufficiente modificare questa riga:

    vList = Array("noz", "quz", "vaz", "voz", "apz")

così:

    vList = Array("nozx", "quzx", "vazx", "vozx", "apzx")

La risposta è stata utile?

0 commenti Nessun commento

16 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-05-10T17:26:00+00:00

    Grazie ma il file è un po' personale.

    Riprovo da solo.

    Grazie comunque e scusa per il tempo che ti ho fatto perdere.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-05-09T17:51:25+00:00

    Scusa ma non ho capito cosa fare.

    Metti in condivisione il file problematico. Oppure spiega meglio quello che vuoi fare, non è per nulla chiaro se leggo il tuo post e guardo il codice. Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-05-09T16:04:14+00:00

    Scusa ma non ho capito cosa fare.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2011-05-09T12:37:20+00:00

    Ho creato circa 30 fogli dove in alcuni di essi con una procedura ho definito varie celle.

    Con questa procedura per esempio nel foglio a1 ho definito noz1(nome), quz1(valore), apz1(valore) ect e poi sempre nel foglio a1 ho definito noz2(nome), quz2(valore), apz2(valore). Di seguito nel foglio b1 ho definito noz3, quz3 ect.

    <cut>

     

    Spero di essermi spiegato

    Grazie.

     

    Non ho capito quasi nulla. Intanto chiamare un foglio A1 è una cosa strana, scusami. Hai già un oggetto a cui fare riferimento con A1, uno per ogni foglio. Mah...

    Per favore, posta e metti in condivisione un file qui: http://explore.live.com/windows-live-skydrive e posta il link. Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento