martes, 18 de diciembre de 2018

Gifs animados en un formulario

En épocas festivas como es el mes de diciembre, podemos 'decorar' nuestros formularios con un detalle como es la incorporación de algún gif animado.

En libro que se deja de ejemplo (al pie queda el enlace), se partió del Userform de la entrada publicada en el mes de marzo 2018: Interactuando con Userforms.
Lo que se ha hecho aquí es correr hacia abajo el frame o marco del formulario para insertar una especie de banner con un gif animado.

Previamente habrá que verificar si se tiene instalado el control llamado Microsoft Web Browser. Para ello desde la ficha Desarrollador o Programador se buscarán entre los controles tal como se muestra en la imagen.

Al Aceptar dibujar en la hoja el control. Si se encuentra correctamente registrado aparecerá un cuadro negro (ver imagen), de lo contrario se nos mostrará un mensaje de que falta instalar ese control.
En caso de tener que instalarlo, se pueden seguir las instrucciones dejadas en el siguiente video,

Una vez ya verificado que se dispone del control correctamente instalado, procederemos a entrar al Editor de macros y trabajar con nuestro Userform.
Dependiendo del tamaño de nuestro gif extenderemos el formulario hacia abajo o a derecha y moveremos el frame para poder ubicar el gif.
Incluso podríamos cambiar de lugar algunos controles para dejar el gif dentro del frame o marco:
Ahora nos resta incluir el código para mostrar la animación. 
Las instrucciones las colocaremos en el evento Initialize ajustando nombre del archivo gif.

Private Sub UserForm_Initialize()
'web browser
  ruta = ThisWorkbook.Path         'la imagen se encuentra en el mismo directorio del libro
  archivo = "feliz-navidad"
  ext = ".gif"    
  
  WebBrowser1.Navigate _
  "about:<html><body scroll='no'><img src='" & _
  ruta & "\" & archivo & ext & " '></img></body></html>"

End Sub


Descargar ejemplo desde aquí

Ver VIDEO N° 20.



martes, 4 de diciembre de 2018

Combinar estructuras o bucles.

En programación contamos con algunas estructuras de código. Es decir un bloque de instrucciones que puede utilizarse para varias tareas.
Cuando estas instrucciones son repetitivas las llamamos Bucles.
Así encontramos diferentes bucles que pueden ser:

  • While......Wend
  • Do (While)...... Loop  y su variante: Do.....Loop While
  • Do (Until)........Loop  y su variante: Do..... Loop Until
  • For   ...Next
  • For Each .... Next

Luego encontramos otras estructuras, que si bien no son repetitivas presentan un bloque de instrucciones comunes a varios escenarios:

  • If .....Else......End If
  • Select Case.... End Select
  • With .....End With

Estas estructuras pueden estar contenidas unas dentro de otras.
Para el ejemplo, imaginemos que tenemos un libro con gran cantidad de hojas cada una con su formato: rangos de datos que inician y finalizan en diferentes filas y columnas, hojas en las que se borra un rango completo y otras donde deben ser mantenidas las fórmulas, diferentes condiciones a la hora de protegerlas... y así cada hoja tendrá sus propias características.

Si trabajamos en un libro durante el diseño y programación agregando registros de prueba, en algún momento necesitaremos dejarlo limpio de datos para iniciar su uso real.
O quizás al finalizar por ejemplo un año contable, se necesitan limpiar algunas hojas de registros para iniciar un nuevo período.
Entonces utilizaremos varias de estas estructuras para luego incorporar las instrucciones de borrado de datos.
A continuación se puede observar el armado de la macro con el uso de las siguientes estructuras:

  1. For Each......Next
  2. Select Case ..... End Select
  3. With ......End With

      Sub LIMPIAR()
      'se recorren todas las hojas que deben ser vaciadas de datos:
      For Each sh In Sheets
          'se evalúa cuál es la hoja
          Select Case sh.Name
            'según el nombre de la hoja serán las instrucciones de borrado
            Case Is = "PRODUCTOS"
                 With Sheets("PRODUCTOS")
                    'instrucciones para hoja Productos
                 End With
           Case Is = "MOVTOS"
                With Sheets("MOVTOS")
                   'instrucciones para hoja Movimientos
                End With
           'el resto de las hojas
         End Select
     Next sh
     End Sub

En el siguiente VIDEO N° 19 se explica en detalle este tema.