lunes, 2 de junio de 2014

VBA: Ocultar y Mostrar los Nombres definidos.

Toca hoy un pequeño procedimiento para ocultar a la vista (o mostrar) los Nombres definidos existentes en nuestro Libro de trabajo.

¿Qué motivo podríamos tener para ocultar a la vista del usuario los Nombres definidos?... bueno, uno muy sencillo, 'proteger' la integridad de nuestros vínculos y referencias frente al usuario del Libro...

Una ventaja de lo que vamos a proponer es que en todo caso los nombres (ocultos o visibles) son plenamente operativos y funcionales, exactamente igual que si estuvieran a la vista!!.


Crearemos un módulo en el Proyecto de VBA en nuestro Editor de VB, donde insertaremos los dos siguientes procedimientos Sub, una que oculta y otro que muestra todos los Nombres definidos del Libro:

Sub MuestraNombres()
'muestra los nombres definidos
Dim n As Name

'recorremos TODOS los Nombres definidos del Libro
For Each n In ThisWorkbook.Names
    'si está oculto lo hace visible....
    If n.Visible = False Then n.Visible = True
Next n
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub OcultaNombres()
'oculta los nombres definidos
Dim n As Name

'recorremos TODOS los Nombres definidos del Libro
For Each n In ThisWorkbook.Names
    'si está visble lo oculta....
    If n.Visible Then n.Visible = False
Next n
End Sub



Recordemos, aún estando Ocultos los Nombres definidos son funcionales.. es decir, podemos usarlos en nuestras fórmulas, podemos ir a ellos desde el Cuadro de nombres, etc...

Otra sencilla macro que nos permite saber de la existencia de Nombres definidos ocultos consistiría en listar, sobre la Hoja de cálculo, todos los Nombres ocultos.
Para ello creamos el siguiente procedimiento:

Sub ListaNombresOcultos()
'Lista todos los nombres ocultos!!!
Dim n As Name
fila = 1
For Each n In ActiveWorkbook.Names
    'lo listamos en la columna A y B (nombre y Se refiere a:)
    'sólo si está oculto...
    If n.Visible = False Then
        Cells(fila, "A") = n.Name
        Cells(fila, "B") = " " & n.RefersTo
        fila = fila + 1
    End If
Next n
End Sub



Finalmente os propongo un último procedimiento que permita al usuario decidir qué Nombres definidos quiere Ocultar...
En nuestro módulo del Proyecto de VBA incluimos:

Sub Ocultar_Nombres()
'macro para Ocultar Nombres definidos..

'definimos variables
Dim NomDef As Name, Pregunta As String

'recorremos TODOS los Nombres definidos del Libro
For Each NomDef In ActiveWorkbook.Names

    'preguntamos al usuario si quiere ocultarlo
    Pregunta = MsgBox(Prompt:="Ocultar Nombre definido " & Chr(10) & _
        NomDef.Name & "?" & Chr(10) & _
        "que Se refiere a: " & Chr(10) & NomDef.RefersTo, Buttons:=vbYesNo)

    'si la respuesta es Sí, entonces lo ocultamos....
    If Pregunta = vbYes Then NomDef.Visible = False

Next NomDef
End Sub

3 comentarios:

  1. Hola!, podria arrastrar nombres ocultos por cambiar la version de Excel 2007 a 2016?...no reconozco la mayoría de los nombres en un archivo, no los cree yo...Porque aparecerán ?:. Mil gracias!

    ResponderEliminar
    Respuestas
    1. Hola,
      los nombres definidos diría han existido desde casi siempre, y no parece que por cambiar de versión de 2007 a 2016 se tengan que ver afectado.
      Obviamente alguien creó esos nombres definidos en algún momento en el fichero, y seguirán existiendo mientras no se eliminen...
      Quizá acciones de copiar y pegar o mover hojas entre libros te hayan 'arrastrado' nombres de un sitio a otro

      Saludos

      Eliminar
    2. Debe ser, pero soy la única que pone mano a los archivos... son nombres sin sentido, rangos que no me interesan...rarísimo!!. Mil gracias por responder

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.