Mostrar y vocalizar actividades pendientes en Excel @EXCELeINFO
En un artículo anterior vimos una macro para que al abrir un archivo de Excel nos muestre un mensaje donde nos enliste el nombre de las personas que cumplen años el día actual, es decir, el día en que se abre el archivo.
Siguiendo la misma temática, he desarrollado otro ejemplo más robusto en que utilizamos una característica interesante de Windows que es vocalizar un texto usando macros, las cuales no ayudarán a que se nos muestre un mensaje con las actividades que tenemos vigentes, además de que vocalizarán dichas actividades. La característica es Texto a voz o TTS, que por su siglas en ingles es Text to speech.
Activar Texto a voz (TTS) en Windows
En el Panel de control o Configuraciones de Windows 10 entramos a la ruta Reconocimiento de voz > Texto a voz y validamos que estén configuradas las opciones de voz.
Figura 1. Elegir el idioma de vocalización de Texto a voz.
Ver video Mostrar y vocalizar actividades pendientes en Excel
Tabla de actividades pendientes
Tenemos una Tabla de Excel la cual contendrá una lista de actividades donde incluyamos el NOMBRE de la actividad, la FECHA y el STATUS de las mismas.
Figura 2. Nos interesa se informados de las actividades vigentes.
A considerar antes de ejecutar la macro
La tabla a usar tiene el nombre tblActividades debemos asegurarnos que la columna con las fechas se llame F_EJECUCIÓN. Lo anterior para que la macro funcione, después de hacerla funcionar puedes cambiar los nombres a conveniencia.
Figura 3. Nos aseguramos de tener bien definido el nombre de la tabla y la columna de fechas.
También es importante validar qué Nombre de usuario tienes configurado en Excel y si es necesario cámbialo. Te dirige a Opciones > General > Nombre de usuario. Lo anterior, ya que la macro también mostrará y vocalizará tu nombre.
Cómo funciona
Ya tenemos nuestra tabla con las actividades por FECHA y por STATUS. Cada vez que el archivo se abra, la macro recorrerá la columna F_EJECUCIÓN y hará la siguiente validación:
“Si la fecha de ejecución es igual a la fecha de hoy y además la actividad está en status de VIGENTE, se tomará como actividades pendientes de cerrar.”
Las actividades que cumplan con el anterior criterio se mostraran todas en un mensaje, además de que se vocalizarán dichas actividades. Podemos abrir el archivo y sólo enfocarnos en lo que escuchamos, para así poder desviar nuestra mirada a otra parte.
Figura 4. Se muestran y se vocalizan las actividades pendientes del día.
Código vba de la macro
El punto importante a considerar es la macro es un nuevo procedimiento que nunca habíamos usado en este Blog. Es el método Speech.Speak que nos permite vocalizar valores escritor a voz.
Es importante mencionar que el método Speech.Speak tiene como segundo parámetro SpeakAsync, si lo ponemos en False se detendrá la vocalización a ejecutar otra línea de código, en cambio, si lo ponemos en True se seguirá vocalizando el texto aunque se ejecute otra macro.
Usamos la macro Auto_Open dentro de un módulo normal para que se ejecute al momento de abrir el archivo.
'--------------------------------------------------------------------------------------- ' Macro : Mostrar y vocalizar actividades pendientes. ' Author : MVP, Sergio Alejandro Campos ' Date : 03-nov-2016 ' Blog : exceleinfo.com ' Youtube : youtube.com/user/sergioacamposh '--------------------------------------------------------------------------------------- ' Option Explicit ' Sub Auto_Open() ' 'Declaración de variables ' Dim MiRango As Range Dim Celda As Range Dim Nombre, Nombre2, Mensaje, Usuario, Titulo ' 'Asignamos valores a las variables Set MiRango = Range("tblActividades[F_EJECUCIÓN]") Usuario = Application.UserName Titulo = "EXCELeINFO" ' 'Recorremos cada celda y validamos VS la fecha actual ' For Each Celda In MiRango If Celda.Value = Date And Celda.Offset(0, 2).Value = "VIGENTE" Then Mensaje = Usuario & ", tienes estos pendientes para el día de hoy: " & Date ' Nombre = Chr(149) & Celda.Offset(0, -1).Value Nombre2 = Nombre2 & vbNewLine & Nombre End If Next Celda ' If IsEmpty(Nombre2) Then 'En caso no haber pendientes... ' Application.Speech.Speak "No tienes pendientes para hoy.", True MsgBox "No tienes pendientes para hoy.", vbInformation, Titulo ' Else 'Se vocalizan y muestran los pendientes. ' Application.Speech.Speak Mensaje & Nombre2, True MsgBox Mensaje & vbNewLine & Nombre2, vbInformation, Titulo ' End If ' End Sub