Cómo importar datos de Excel a un formulario de cita en Outlook usando VBA desde Excel
Es fácil importar datos de Excel a un elemento de Outlook, como un mensaje o una cita, porque la funcionalidad está incorporada y un asistente te guía durante todo el proceso. Sin embargo, si deseas lograr lo mismo desde Excel, por ejemplo, mostrar y completar una cita mientras trabajas en Excel, necesitarás un poco de magia en VBA. En este artículo, te proporcionaré el código para completar automáticamente un formulario de cita de Outlook utilizando datos de Excel, desde dentro de Excel.
Estoy utilizando Microsoft 365 en un sistema Windows 10 de 64 bits. (Recomiendo que esperes a actualizar a Windows 11 hasta que se solucionen todos los problemas). Descargar los archivos .xlsm, .xls y .cls te ahorrará mucho trabajo. No tuve problemas al ejecutar el procedimiento en el formato .xls, pero el código se escribió específicamente para 365, por lo que no puedo garantizar que no te encuentres con algo que no consideré. Las aplicaciones web de Outlook no admiten VBA.
Este artículo asume un conocimiento básico de Excel, pero incluso si eres principiante, deberías poder seguir las instrucciones con éxito. Este artículo es largo, pero principalmente es explicativo, por lo que no estarás trabajando tanto como podrías pensar, especialmente si descargas los archivos de demostración.
El procedimiento de evento VBA
Utilizaremos el procedimiento de evento BeforeDoubleClick para activar el código en Listado A y mostrar el formulario de cita predeterminado de Outlook. Además, el código completará algunos campos. En ese momento, puedes continuar agregando información o guardar y cerrar el formulario. Este procedimiento solo completa algunos de los campos del formulario, pero puedes adaptar fácilmente otros campos, y te enseñaré cómo hacerlo a medida que revisamos el código.
Listado A
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' Mostrar el formulario de cita de Outlook y completar los campos predeterminados.
Option Explicit
Dim ol As Outlook.Application
Dim olApptItem As Outlook.AppointmentItem
Dim wb As Workbook
Dim ws As Worksheet
Dim r As Long
Dim c As Long
Set ol = New Outlook.Application
Set olApptItem = ol.CreateItem(olAppointmentItem)
Set wb = ThisWorkbook
' Actualizar para trabajar con una hoja específica.
Set ws = wb.Sheets("Hoja1")
r = Target.Row
c = Target.Column
On Error GoTo errHandler:
' Si el doble clic no está en la columna C de la Tabla1, salir del procedimiento.
If c <> 3 Then Exit Sub ' Revisar la columna.
If r <= 2 Then Exit Sub ' Revisar la fila.
If ws.ListObjects("Table1").DataBodyRange.Rows.Count > r + 2 Then Exit Sub ' Revisar filas inferiores.
With olApptItem
' Inicio y Fin incluyen tanto la fecha como la hora.
.Subject = ws.Cells(r, c - 1).Value
.Start = ws.Cells(r, c).Value & " " & ws.Cells(r, c + 1).Value
.End = ws.Cells(r, c).Value & " " & ws.Cells(r, c + 2).Value
.Display
End With
Set ol = Nothing
Set olApptItem = Nothing
Set wb = Nothing
Set ws = Nothing
Exit Sub
errHandler:
MsgBox "Error " & Err.Number & " " & Err.Description
End Sub
Si no estás muy familiarizado con VBA, Listado A puede parecer un poco intimidante, pero la mayoría de él son declaraciones y definiciones de variables. El código que realmente completa y muestra el formulario comienza en el bloque With y es corto, simple y se puede modificar fácilmente para adaptarse a tus necesidades.
Enseñanza y Aprendizaje con Microsoft: Herramientas y Lecciones para Profesores de todos los NivelesAntes de sumergirnos en el código, vamos a ingresarlo y a establecer una referencia a la biblioteca de objetos de Outlook.
Ingresar el código
Estamos trabajando desde un libro de Excel, por lo que lo primero que necesitamos es un archivo de Excel con los valores adecuados para completar una cita de Outlook. Figura A tiene algunos registros, es simple a propósito.
Si estás utilizando una versión con cinta de opciones, asegúrate de guardar el libro como un archivo habilitado para macros. Si estás trabajando en la versión de menú, puedes saltarte este paso.
Para ingresar el procedimiento, presiona Alt + F11 para abrir el Editor de Visual Basic (VBE). En el Explorador de Proyectos a la izquierda, selecciona la hoja que contiene los datos de las citas, en nuestro caso eso es Hoja1. Ingresa el código manualmente o importa el archivo .cls descargable. Además, el procedimiento está en los archivos descargables .xlsm, .xls y .cls. Si ingresas el código manualmente, no lo pegues desde esta página web. En su lugar, copia el código en un editor de texto y luego pega ese código en el módulo de la hoja. De esta manera, se eliminarán cualquier carácter web fantasma que puedan causar errores.
Antes de poder ejecutar el código, debes establecer una referencia a la biblioteca de objetos de Outlook porque algunas de las declaraciones hacen referencia a objetos de Outlook. Para hacerlo, haz clic en el menú Herramientas y elige Referencias (Figura B). En el cuadro de diálogo resultante, desplázate hasta la Biblioteca de objetos de Microsoft Outlook (la mía es la versión 16, pero es posible que estés ejecutando otra versión; si hay dos, comprueba la biblioteca más nueva).
Para ejecutar el código, regresa a la hoja y haz doble clic en cualquiera de los cuatro valores de fecha en la columna C (C3:C6). Al hacerlo, se abrirá el formulario de cita de Outlook y se completarán el asunto, la hora de inicio y la hora de fin usando los valores correspondientes a la fecha en la que hiciste doble clic. Por ejemplo, Figura C muestra el formulario después de hacer doble clic en C3. Puedes ingresar más datos, cerrar y guardar la cita como está, o cancelar. Por ahora, selecciona la opción de cancelar.
Guía de Examen de Certificación Lotus Notes: Desarrollo de Aplicaciones y Administración del SistemaIntenta con las cuatro celdas de fecha, cancelando cada una en lugar de guardar algo por ahora. ¿Notaste un problema con C4? Aparece un mensaje de error. Haz clic en OK para cerrar el mensaje de error y luego echa un vistazo a los datos y ve si puedes descubrir por qué antes de que te lo explique.
Si adivinaste que es un problema de fecha, tienes razón. La hora de inicio es las 10 a.m. El valor necesita el componente de minutos, es decir, 10:00AM. Arregla eso e inténtalo de nuevo. ¡Ups... todavía no funciona, como se puede ver en la Figura D. Sin cambios, el evento se ejecuta de las 10 a.m. hasta las 12 a.m., en la misma fecha, lo cual no puede suceder. La incompatibilidad de tipo en el mensaje de error es la mejor pista. Cambia 12:00AM a 12:00PM e intenta de nuevo. Ambos valores de tiempo están incorrectos, por lo que debes corregir ambos antes de que este registro funcione. No estoy tratando de complicar las cosas, pero quiero que veas la sencilla manipulación de errores en acción.
Ahora que has visto el procedimiento en funcionamiento, probablemente te estés preguntando cómo funciona. Eso es lo que abordaremos a continuación.
Explicación del procedimiento VBA
Al revisar el procedimiento, puedes ver que las primeras líneas declaran y definen objetos y variables. Esta parte es sencilla. La primera declaración que podrías necesitar modificar al aplicar el procedimiento a tu propio trabajo es:
Set ws = wb.Sheets("Hoja1")
He especificado Hoja1 para que este procedimiento no funcione en ninguna otra hoja. Por supuesto, puedes hacer referencia a otra hoja o incluso hacer referencia a ActiveWorksheet.
Cómo gestionar eficazmente grandes volúmenes de correo electrónicoSet ws = wb.ActiveWorksheet
Recomiendo hacer este cambio solo si deseas ejecutar este procedimiento en otras hojas, lo cual es poco probable. Si utilizas esta declaración, estás abriendo una lata de gusanos porque el doble clic funcionará en la hoja activa, no solo en la Hoja 1.
La declaración On Error maneja cualquier error en tiempo de ejecución; lo viste en acción en la Figura D. Esta tarea es lo suficientemente simple como para que no necesites mucho más manejo de errores, pero asegúrate de probarlo a fondo antes de tomar esa decisión.
Las siguientes declaraciones verifican la celda en la que se hizo doble clic:
'If double-click isn’t in column C of Table1, Exit Sub.
If c <> 3 Then Exit Sub 'Column check.
If r <= 2 Then Exit Sub 'Row check.
Si la celda en la que se hizo doble clic no está en la columna C, el procedimiento se detiene. Si la celda en la que se hizo doble clic está en la fila 1 o en la fila de encabezado, el procedimiento se detiene. La última verificación se encarga de todas las filas debajo de la última fila en el objeto de tabla. Al aplicar este procedimiento a tus propios datos, debes modificar estas tres declaraciones para adaptarlas a tu objeto de tabla. Por ejemplo, si tus fechas están en la columna D, usa el componente If c <> 4. Si tu fila de encabezado está en la fila 1, usa el componente If r = 1.
Integración de StarOffice: calendariosLa última declaración es un poco más complicada. Primero, actualiza el nombre de la tabla. Luego, teniendo en cuenta en qué fila se encuentra el encabezado, actualiza el componente r + 2. La propiedad Rows.Count devuelve 4 porque hay cuatro filas de datos (excluyendo la fila de encabezado del conteo). El 2 en el componente r + 2 tiene en cuenta la fila 1 y la fila de encabezado de la tabla. En nuestro ejemplo, eso da como resultado 6, nuestra última fila de datos.
Este es el único lugar donde es posible que desees mejorar un poco tu procedimiento agregando un cuadro de mensaje que explique por qué se detiene el procedimiento. A mí me parecería un poco molesto, pero si estás distribuyendo esto a otras personas, es posible que encuentren útil saber por qué el procedimiento no está funcionando, aunque creo que es bastante obvio.
El bloque With es el que realiza el trabajo real:
With olApptItem
' Inicio y Fin incluyen tanto la fecha como la hora.
.Subject = ws.Cells(r, c - 1).Value
.Start = ws.Cells(r, c).Value & " " & ws.Cells(r, c + 1).Value
.End = ws.Cells(r, c).Value & " " & ws.Cells(r, c + 2).Value
.Display
End With
El bloque With hace referencia a un formulario de cita de Outlook (olApptItem). Cuando ingreses el carácter de punto, Excel abrirá una lista de propiedades y eventos, como se muestra en la Figura E. Agregarás información adicional al formulario de esta manera. Solo incluí algunos para mantener las cosas simples.
Las declaraciones de completado utilizan direccionamiento relativo para encontrar el valor correcto. Por ejemplo, el texto de asunto está en la misma fila (r) que la celda en la que se hizo doble clic. En el código de definición, establecí las dos variables Long r y c en la fila y columna de Target.
Cómo gestionar eficazmente el correo electrónico en tu empresar = Target.Row
c = Target.Column
Target es el parámetro pasado que identifica la dirección de la celda. Si haces doble clic en el valor de la fila 3, r será igual a 3. Si haces doble clic en un valor en la columna C, c también será 3. Al restar 1 a c, el código hace referencia a la celda a la izquierda de la celda en la que se hizo doble clic. En este caso, eso es la columna Tarea (columna B). Debido a que hemos establecido r y c de antemano, solo necesitas cambiar los valores reales para identificar la posición relativa de los datos de completado.
Los ajustes de Inicio y Fin son un poco más complejos porque acomodan la fecha y la hora. Es por eso que estas dos declaraciones concatenan los valores de dos celdas. Específicamente, Inicio es la fecha de inicio y la hora de inicio. De manera similar, Fin es la fecha de finalización y la hora de finalización. Observa que la fecha de inicio y finalización utilizan la misma referencia porque el evento no se extiende más allá de un día. Al hacer referencia a la hora, deberás actualizar los valores (1 y 2) en consecuencia para identificar las celdas que contienen esos valores.
El evento Display muestra el formulario, que está precompletado con los valores correspondientes de la tabla.
Las últimas declaraciones destruyen los objetos y salen del sub. El siguiente manejador de errores muestra un mensaje de error (Figura C) solo cuando es llamado. Puedes agregar mensajes de error más específicos si lo deseas, pero este código simple podría ser adecuado.
Al principio, el procedimiento puede parecer un poco desafiante, pero como he demostrado, es más simple de lo que podrías darte cuenta con solo un vistazo. La mayor parte de él son declaraciones y definiciones de objetos y variables. Los archivos de demostración deberían funcionar bien para ti, con la excepción de cualquier error(es) no previsto(s) en el formato .xls. Al aplicar el procedimiento a tu propio trabajo, tendrás que ajustar algunas declaraciones, pero he identificado esos puntos para ti.
WordPerfect Office 2000: La solución perfecta para compartir documentos en diferentes plataformasEn Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Software, allí encontraras muchos artículos similares a Cómo importar datos de Excel a un formulario de cita en Outlook usando VBA desde Excel , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados