proprietà di un foglio in VBA

Anonimo
2016-09-08T08:43:38+00:00

Buongiorno.

Io ho un foglio denominato CAB, tuttavia nelle proprietà del foglio leggo che la proprietà (Name) è Foglio1 mentre quella Name è CAB.

Volevo sapere se in una procedura VBA o macro posso fare riferimento alla proprietà (Name) che non cambia mai.

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
2016-09-08T09:26:58+00:00

Ciao Pasquale,

Io ho un foglio denominato CAB, tuttavia nelle proprietà del foglio leggo che la proprietà (Name) è Foglio1 mentre quella Name è CAB.

Volevo sapere se in una procedura VBA o macro posso fare riferimento alla proprietà (Name) che non cambia mai.

A titolo di esempio prova qualcosa del genere:

'=========>>

Option Explicit

'--------->>

Public Sub Tester()

Dim WB As Workbook

    Dim SH As Worksheet

    Const sCodeName As String = "Foglio1"

    Set WB = ThisWorkbook

    Set SH = GetWorksheetFromCodeName(sCodeName)

    With SH

    MsgBox "Nome = " & .Name _

    & vbNewLine _

    & "CodeName = " & .CodeName

   End With

End Sub

Public Function GetWorksheetFromCodeName(CodeName As String) As Worksheet

    '\ Chip Pearson

    '\http://www.cpearson.com/excel/RenameProblems.aspx

    Dim WS As Worksheet

    For Each WS In ThisWorkbook.Worksheets

        If StrComp(WS.CodeName, CodeName, vbTextCompare) = 0 Then

            Set GetWorksheetFromCodeName = WS

            Exit Function

        End If

    Next WS

End Function

'<<=========

Nota però che la proprietà CodeName del foglio può essere modificata a mano, dall'Editor VBA:

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2016-09-08T09:40:34+00:00

In italiano la spiegazione qui:

E qui due modi per modificare il (Name) Runtime:

Public Sub m()

Foglio1.[_CodeName] = "Pippo"

End Sub

Oppure:

Public Sub m()

Dim sh As Worksheet

Set sh = ThisWorkbook.Worksheets("Foglio1")

With sh

.[_CodeName] = "Pluto"

End With

Set sh = Nothing

End Sub

La differenza sostanziale dal punto di vista di chi automatizza Excel è questa.

Se nel TUO codice fai riferimento al Name, se l'utente lato celle modifica l'etichetta del foglio, il codice non sarà più coerente.

Se fai invece riferimento al (Name), anche se l'utente modifica l'etichetta del foglio il codice continuerà a puntare al foglio che corrisponde al (Name).

Cosa utilizzare lo decide il contesto. Diciamo che nella maggior parte dei casi il codice punta al Name.

La risposta è stata utile?

0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-09-08T16:04:57+00:00

    Grazie mille.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-09-08T13:30:51+00:00

    Grazie Mauro.

    E grazie anche a Norman che ha postato l'altro pezzo del puzzle... ;-)

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-09-08T10:27:50+00:00

    Grazie Mauro.

    La risposta è stata utile?

    0 commenti Nessun commento