Archivos para junio, 2014

16 June, 2014 23:19

Publicado: 16 de junio de 2014 en Actualidad
Anuncios

mostrar hojas ocultas en un libro de Exce

Publicado: 3 de junio de 2014 en Actualidad

mostrar hojas ocultas en un libro de Excel

Estimados amigos !!! Llevo mas de un año sin publicar una entrada en mi querido Blog, espero que sepan disculpar tamaña falta de respeto hacia todos mis lectores. Problemas de índole personales y laborales me llevaron a dejar es hobbie tan hermoso que tengo, pero de a poco voy retornando. Espero, de ahora en mas, cumplir con mis publicaciones semanales y ayudar con las consultas que me realicen, mas allá de que esto último lo estuve haciendo a través de mi página en Facebook ()

Bueno, vasta de disculpas (aunque las merecen sobradamente) y volvamos al trabajo. Me hicieron una consulta bastante interesante y levantaré un post al respecto: "tengo un libro cualquiera, con algunas hojas ‘invisibles’… ¿como hago para mostrarlas y poder ver su contenido?". Este lector y amigo ha tenido mucha suerte en que, generalmente, debo programar en entornos muy restringidos, lo cual me volvió un poco "práctico" sobre estos asuntos de andar averiguando como ver cosas que otros ocultaron. Empecemos.

[+/-] Ver el resto / Ocultar

Para comenzar correctamente, daremos un repaso sobre el tema de la visibilidad de las hojas, las cuales pueden ostentar 3 estados:

-1 Visible (xlSheetVisible)

0 Oculta (xlSheetHidden)

2 Muy Oculta (xlSheetVeryHidden)

La primera no merece mayores observaciones: visible; si, esa que estamos viendo y punto. La segunda, una hoja oculta (hidden), es la que ocultamos desde el menú respectivo (formato / hoja / ocultar) o, en Excel 2013, desde la pestaña "Inicio", grupo "Formato", opción "Ocultar y mostrar", "Ocultar hoja". Esto hará que la hoja activa "desaparezca"… pero nuestro usuario sabrá que existen hojas ocultas.

Para hacer "invisible" una hoja (y que nadie se de cuenta de ello) debemos ir hasta el editor de VBA y seleccionar dicha hoja desde el Explorador de proyectos y, desde la ventana de propiedades, poner el atributo "visible" en xlVeryHidden:

Selecciono la Hoja2 y, debajo, cambio a "muy oculta"

Lo dicho hasta el momento ocultará la hoja en cuestión, con una ventaja bastante grande: nuestros usuarios no se darán cuenta, en ningún momento, que esa hoja existe. Tenemos otra forma de realizar este procedimiento, y es mediante una macro:

Hasta aquí todo bien. Pero mi amigo, y por suerte es un amigo, me la complica: "Damián-me dice-si alguien me pasa un libro de Excel ¿como puedo hacer para averiguar si contiene hojas ‘muy ocultas’?… Y si están ¿puedo mostrarlas?". Y, desde ya, mi respuesta es: si.

El procedimiento es sencillo y primero veremos los pasos lógicos a seguir:

1) abrir el libro que, supuestamente, posee hojas en estado xlSheetVeryHidden

2) ir a nuestra macro e indicarle el nombre del libro

3) recorrer todas las hojas del libro, preguntando si está oculta (estado "2" o "xlSheetVeryHidden")

4) si el punto 4 es verdadero, mostrar la hoja, colocándole el estado "0" o "xlSheetVisible"

Lo anteriormente expuesto quedaría, mas o menos, así:

el código es breve, sencillo y bien comentado para una mejor interpretación

Bueno amigos, que me han dado la inmensa alegría de superar el medio millón de visitas, nos vemos pronto en otra entrada. Espero que les sea de utilidad y puedan aplicar este ejemplo a sus proyectos.

Salu2.xlsx

link al archivo

Blog

Publicado: 3 de junio de 2014 en Actualidad

controlando la impresion en Excel

Un amigo de la provincia de Salta, una de las mas hermosas de Argentina, me consulta lo siguiente: "-Tengo una planilla a la que hay que cargarle determinados datos… si estos datos no con completados por el usuario, la acción de imprimir debe cancelarse. ¿Se puede lograr?". En Excel, y mas aún utilizando macros… todo se puede lograr.

No estamos ante una tarea complicada, ya que el proyecto requiere de poco código y, encima, VBA nos provee de las herramientas necesarias para facilitarnos las cosas.

Lo primero es ir al editor de Visual Basic (Alt + F11) y hacer click en "ThisWorkbook", en la ventana del Explorador de Proyectos, para así abrir automáticamente (sobre la derecha) la ventana de código del libro:

de las listas desplegables superiores seleccionamos "Workbook" y luego "BeforePrint", tal como se observa en la imagen de arriba. Todo el código irá ahí escrito.

[+/-] Ver el resto / Ocultar

Repasemos las nociones básicas.

Visual Basic es un lenguaje "orientado a eventos" y, casualmente, "BeforePrint" (AntesDeImprimir) es un evento. Todo el código que escribamos dentro de ese Sub se ejecutará antes de que se produzca la impresión de la hoja. Si nos fijamos bien, ese procedimiento (Sub) trae un argumento predeterminado por el propio programa: Cancel, de origen booleano (que solo acepta dos posibles valores: verdadero o falso). Y este punto es el que nos dará control total sobre la impresión y así lograremos cancelarla si algo "no nos gusta" o salió mal. Veamos:

view plainprint?

  1. Private Sub Workbook_BeforePrint(Cancel As Boolean)
  2. Dim CantCopias As Byte
  3. Dim QueFalta As String
  4. QueFalta = ""
  5. CantCopias = 1
  6. ‘reviso celda x celda, utilizando a If…
  7. ‘luego de cada revisión, y si falta el dato, guardo
  8. ‘en la variable "QueFalta" el nombre del campo, así
  9. ‘ayudo al usuario a identificar la falla:
  10. If Trim(Range("b1").Value) = "" Then
  11. Cancel = True
  12. QueFalta = "Apellido"
  13. ElseIf Trim(Range("b2").Value) = "" Then
  14. Cancel = True
  15. QueFalta = "Nombre"
  16. ElseIf Trim(Range("b3").Value) = "" Then
  17. Cancel = True
  18. QueFalta = "Edad"
  19. Else
  20. Cancel = False
  21. End If
  22. ‘si Cancel = True, entonces hubo alguna omisión, la cual
  23. ‘muestro a través de un MsgBox, usaon la variable "QueFalta"
  24. ‘para mostrarle al usuario donde estuvo el problema:
  25. If Cancel = True Then
  26. MsgBox "Faltan dados (" & QueFalta & "). La impresión se cancela", vbCritical, "Error"
  27. Else
  28. ‘si todo sale bien (cancel=false), imprimo la cantidad
  29. ‘de copias que tengo en la variable "CantCopias"
  30. ActiveSheet.PrintOut copies:=CantCopias
  31. End If
  32. End Sub

Como siempre trato de hacer, el código se encuentra bien comentado, a los efectos de un rápido análisis y comprensión del código.

En este ejemplo realicé algo muy, pero muy sencillo: en la hoja se pide apellido, nombre y edad (podrían ser 100 campos, pero 3 alcanzan para el ejemplo; aparte soy bastante vago y no me gusta renegar con esos detalles =):

de entrada, en este muy básico formulario de hoja, podemos observar que falta el nombre.

A este código no será necesario asignarle ningún botón ni otro objeto para "disparar" el evento: recordemos que VBA nos brinda a "BeforePrint" para ello, así que la macro se ejecutará cada vez que el usuarios vaya hasta el propio "Imprimir" de Excel:

listo, hago click sobre "Imprimir"

Y, como falta el segundo campo (nombre), obtengo la señal de alerta de Excel, cancelando la impresión del formulario:

ahá… funciona.

Esto de los eventos del libro (o de una hoja en particular) son algo realmente útil. Si por nuestra cuenta indagamos un poco, veremos que existen muchas otras opciones interesantes aparte de BeforePrint, como:

BeforeSave: antes de guardar

SheetActivate: cuando se activa una determinada hoja

WindowDeactivate: momento en el cual se desactiva (desaparece de vista) la ventana activa

NewChart: insertar un nuevo gráfico

NewSheet: insertar una nueva hoja

Open: al abrir un libro

y muchas, muchas mas.

Cada vez que se "dispare" un evento, podremos "adelantarnos" al mismo y colocar ahí el código que necesitemos, para cambiar las cosas y ajustar Excel a nuestras necesidades.

Disculpen tantos espacios en blanco entre publicación y publicación, otras obligaciones me tienen realmente con poco tiempo. Muchas gracias por los mensajes que recibo, incluso en Facebook, en donde son muy amables hacia mi trabajo y ayuda con Excel.

Un abrazo, pronto seguimos.

Link al archivo