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

No hay comentarios:

Publicar un comentario en la entrada