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-07-11T19:08:03+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.

    Sub Def()

        Dim Pluto, Strprompt As String

        Dim num, dom, var As String

        dom = "Introduci Foglio?"

        num = InputBox(dom)

        Strprompt = "Inserisci n°?"

        var = "noz"

        Pluto = var & num

        With ActiveSheet

            .Names.Add Name:=Pluto, RefersTo:="=" & .Name & "!" & CStr(ActiveCell.Address(True, True))

        End With

        MsgBox Name & "!" & CStr(ActiveCell.Address(True, True))

        ActiveCell.Offset(0, 1).Range("A1").Select

        var = "quz"

        Pluto = var & num

        With ActiveSheet

            .Names.Add Name:=Pluto, RefersTo:="=" & .Name & "!" & CStr(ActiveCell.Address(True, True))

        End With

        MsgBox Name & "!" & CStr(ActiveCell.Address(True, True))

        ActiveCell.Offset(0, 2).Range("A1").Select

        var = "vaz"

        Pluto = var & num

        With ActiveSheet

            .Names.Add Name:=Pluto, RefersTo:="=" & .Name & "!" & CStr(ActiveCell.Address(True, True))

        End With

        MsgBox Name & "!" & CStr(ActiveCell.Address(True, True))

        ActiveCell.Offset(0, 2).Range("A1").Select

        var = "voz"

        Pluto = var & num

        With ActiveSheet

            .Names.Add Name:=Pluto, RefersTo:="=" & .Name & "!" & CStr(ActiveCell.Address(True, True))

        End With

        MsgBox Name & "!" & CStr(ActiveCell.Address(True, True))

        ActiveCell.Offset(0, 4).Range("A1").Select

        var = "apz"

        Pluto = var & num

        With ActiveSheet

            .Names.Add Name:=Pluto, RefersTo:="=" & .Name & "!" & CStr(ActiveCell.Address(True, True))

        End With

        MsgBox Name & "!" & CStr(ActiveCell.Address(True, True))

        ActiveCell.Offset(0, -9).Range("A1").Select

        Sheets("Portafoglio").Select

        Range("A2").Select

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-07-10T04:37:50+00:00

    Non c'è nessun Variant.

    La routine mi nomina una cella per esempio noz5, l'altra quz5 ect ma come ho detto invece di mettere il nome del foglio mi mette RIF cioè =#RIF! e poi la cella.

    Non capisco perchè!

    Se non posti tutto il codice, non poso capire. E ripeto che #RIF! indica che il nome del foglio non è valido. Se metti un:

    MsgBox  .Name & "!" & CStr(ActiveCell.Address(True, True))

    prima della definizione del nome, che stringa otteni?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-07-09T12:09:46+00:00

    Non c'è nessun Variant.

    La routine mi nomina una cella per esempio noz5, l'altra quz5 ect ma come ho detto invece di mettere il nome del foglio mi mette RIF cioè =#RIF! e poi la cella.

    Non capisco perchè!

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2011-07-09T04:02:10+00:00

    Scusa il ritardo nella risposta ma non ci sono stato.

    Grazie tante comunque ma non funziona.

    Perchè in    .Names.Add Name:="Pluto", _

                RefersTo:="=" & .Name & "!" & _

                CStr(ActiveCell.Address(True, True))

    non posso mettere "Pluto" ma metto un variabile tipo var

       .Names.Add Name:=var, _

                RefersTo:="=" & .Name & "!" & _

                CStr(ActiveCell.Address(True, True))

    dove var =  noz + un numero

    cioè var = noz & nn

    e nn cioè il numero mi varia.

    All'inizio sembra che funziona: riesco a nominare la cella ad esempio noz5, la volta successiva noz9 secondo i miei bisogni.

    Ma in realtà se vado nel menu Inserisci e Definisci nome e scelgo noz9 mi da =#RIF!$B$4.

    Grazie

     

    Ci sarà un errore da parte del tuo codice nel definire il nome del Foglio. Quel #RIF! sembra essere abbastanza chiaro.  Tu puoi mettere quello che vuoi al posto di Pluto, purchè sia una stringa(non ho capito perchè è un Variant). I tuoi noz,, quz, apz *non contengono* quello che dovrebbero e con il codice che hai postato non si capisce *cosa* contengono.

    La risposta è stata utile?

    0 commenti Nessun commento