in

Cómo abrir y completar una cita de Outlook desde Excel usando VBA

Una hoja de cálculo de Excel en blanco

Imagen: PixieMe/Shutterstock

Es fácil importar datos de Excel a un elemento de Outlook, como un mensaje o una cita, porque la funcionalidad está integrada y un asistente lo guía a través de todo el proceso. Si desea lograr lo mismo desde dentro de Excel, por ejemplo, mostrar y completar una cita mientras trabaja en Excel, necesitará un poco de magia VBA. En este artículo, proporcionaré el código para completar previamente un formulario de cita de Outlook usando datos de Excel, desde en el interior Sobresalir.

VER: 83 consejos de Excel que todo usuario debe dominar (TechRepublic)

Uso Microsoft 365 en un sistema Windows 10 de 64 bits. (Le recomiendo que espere para actualizar a Windows 11 hasta que se resuelvan todos los problemas). La descarga de los archivos .xlsm, .xls y .cls le ahorrará mucho trabajo. No tuve problemas para 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 se encontrará con algo que no consideré. Las aplicaciones web de Outlook no son compatibles con VBA.

Este artículo asume un poco de conocimiento de Excel, pero incluso si es un principiante, debería poder completar las instrucciones con éxito. Este artículo es largo, pero es principalmente una explicación, por lo que no trabajará tan duro como podría pensar, especialmente si descarga los archivos de demostración.

El procedimiento de evento de VBA

Usaremos el procedimiento de evento BeforeDoubleClick para activar el código en Listado A para mostrar el formulario de cita predeterminado de Outlook. Además, el código llenará algunos campos. En ese momento, puede continuar agregando información o guardar y cerrar el formulario. Este procedimiento llena solo algunos de los campos del formulario, pero puede acomodar fácilmente otros campos, y le mostraré cómo hacerlo a medida que analicemos el código.

Listado A

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

'Display Outlook appointment form and fill in default fields.

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

'Update to work with a specific sheet.

Set ws = wb.Sheets("Sheet1")

r = Target.Row

c = Target.Column

On Error GoTo errHandler:

'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.

If ws.ListObjects("Table1").DataBodyRange.Rows.Count > r + 2 Then Exit Sub 'Lower rows check.

With olApptItem

'Start and End include both date and time.

.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á muy familiarizado con VBA, Listado A probablemente da un poco de miedo, pero la mayor parte es declarar y definir variables. El código que realmente llena y muestra el formulario comienza en el bloque Con, y es corto, simple y puede modificarse fácilmente para adaptarse a sus necesidades.

Antes de profundizar en el código, ingresémoslo y establezcamos una referencia a la biblioteca de objetos de Outlook.

Introduciendo el código

Estamos trabajando desde dentro de un libro de Excel, por lo que lo primero que necesitamos es un archivo de Excel con los valores apropiados para completar una cita de Outlook. Figura A tiene algunos registros; es simple a propósito.

Figura A

Usaremos los datos en estos campos para completar un formulario de cita de Outlook.

Si está utilizando una versión de cinta, asegúrese de guardar el libro de trabajo como un archivo habilitado para macros. Si está trabajando en la versión de menú, puede omitir este paso.

Para ingresar al procedimiento, presione Alt + F11 para abrir el Editor de Visual Basic (VBE). En el Explorador de proyectos a la izquierda, seleccione la hoja que contiene los datos de la cita, en nuestro caso es Sheet1. Ingrese el código manualmente o importe el archivo .cls descargable. Además, el procedimiento se encuentra en los archivos descargables .xlsm, .xls y .cls. Si ingresa el código manualmente, no pegar desde esta página web. En su lugar, copie el código en un editor de texto y luego péguelo en el módulo de la hoja. Al hacerlo, se eliminarán los caracteres web fantasma que, de lo contrario, podrían causar errores.

Antes de poder ejecutar el código, debe hacer referencia a la biblioteca de objetos de Outlook porque algunas de las declaraciones hacen referencia a objetos de Outlook. Para ello, haga clic en el menú Herramientas y seleccione Referencias (Figura B). En el cuadro de diálogo resultante, seleccione la Biblioteca de objetos de Microsoft Outlook (la mía es 16, pero es posible que esté ejecutando otra versión; si hay dos, consulte la biblioteca más reciente).

Figura B

Agregue la referencia de Outlook.

Para ejecutar el código, regrese a la hoja y haga doble clic en cualquiera de los cuatro valores de fecha en la columna C—C3:C6. Al hacerlo, se abrirá el formulario de citas de Outlook y se completarán los controles de asunto, inicio y fin con los valores correspondientes para la fecha en la que hizo doble clic. Por ejemplo, Figura C muestra el formulario después de hacer doble clic en C3. Puede introducir más datos, cerrar y guardar la cita tal cual o cancelar. Por ahora, haz lo último.

Figura C

Haga doble clic en una de las celdas de fecha.

Pruebe las cuatro celdas de fecha, cancelando cada una en lugar de guardar nada por ahora. ¿Notaste un problema con C4? Devuelve un mensaje de error. Haga clic en Aceptar para descartar el error y luego eche un vistazo a los datos y vea si puede averiguar por qué antes de explicarlo.

Si adivinaste que es un problema de fechas, tienes razón. La hora de inicio es a las 10 a. m. El valor necesita el componente de minutos: 10:00 a. m. Arregla eso y vuelve a intentarlo. Ups… sigue sin funcionar, como puedes ver en Figura D. Tal como está, el evento se lleva a cabo desde las 10 a. m. hasta las 12 a. m., en la misma fecha, lo que no puede suceder. La falta de coincidencia de tipo en el mensaje de error es la mejor pista. Cambie de 12:00 a. m. a 12:00 p. m. y vuelva a intentarlo. Ambos valores de tiempo son incorrectos, por lo que debe corregir ambos antes de que este registro funcione. No estoy tratando de complicar las cosas, pero quiero que vea el manejo simple de errores en el trabajo.

Figura D

Este registro todavía presenta un error.

Ahora que ha visto el procedimiento en funcionamiento, probablemente se esté preguntando cómo funciona. Eso es lo que abordaremos a continuación.

El procedimiento VBA explicado

Al revisar el procedimiento, puede ver que las primeras líneas declaran y definen objetos y variables. Esta parte es sencilla. La primera declaración que podría necesitar modificar al aplicar el procedimiento a su propio trabajo es

Set ws = wb.Sheets("Sheet1")

He especificado Sheet1 para que este procedimiento no funcione en ninguna otra hoja. Podría hacer referencia a otra hoja, por supuesto, o incluso hacer referencia a ActiveWorksheet

Set ws = wb.ActiveWorksheet

Le recomiendo que realice este cambio solo si desea ejecutar este procedimiento en otras hojas, lo cual es poco probable. Si usa esta declaración, está abriendo una lata de gusanos porque el doble clic funcionará en la hoja activa, no solo en la Hoja 1.

La instrucción On Error maneja cualquier error en tiempo de ejecución; lo viste en el trabajo en Figura D. Esta tarea es lo suficientemente simple como para que no necesite mucho más manejo de errores, pero asegúrese de probarla 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 ws.ListObjects(“Table1”).DataBodyRange.Rows.Count > r + 2 Luego salga de Sub ‘Comprobación de filas inferiores.

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 del encabezado, el procedimiento se detiene. La última verificación maneja todas las filas debajo de la última fila en el objeto Tabla. Al aplicar este procedimiento a sus propios datos, debe modificar estas tres declaraciones para acomodar su objeto Table. Por ejemplo, si sus fechas están en la columna D, use el componente If c <> 4. Si su fila de encabezado está en la fila 1, use el componente If r = 1.

La última afirmación es un poco más complicada. Primero, actualice el nombre de la tabla. Luego, teniendo en cuenta en qué fila está el encabezado, actualice el componente r + 2. La propiedad Rows.Count devuelve 4 porque hay cuatro filas de datos (excluyendo la fila de encabezado del recuento). El 2 en el componente r + 2 representa la fila 1 y la fila del encabezado de la tabla. En nuestro ejemplo, eso se evalúa como 6, nuestra última fila de datos.

Este es el único lugar donde quizás desee mejorar un poco su procedimiento agregando un cuadro de mensaje que explique por qué se detiene el procedimiento. El mensaje me parecería un poco molesto, pero si lo estás distribuyendo a otras personas, puede que les resulte útil saber por qué el procedimiento no funciona, aunque creo que es bastante obvio.

El bloque With hace el verdadero trabajo

With olApptItem

'Start and End include both date and time.

.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 Con hace referencia a un formulario de cita de Outlook (olAppItem). Cuando ingresa el carácter de punto, Excel abre una lista de propiedades y eventos, como se muestra en Figura E. Agregará información de formulario adicional de esta manera. Incluí solo algunos para simplificar las cosas.

Figura E

Elija propiedades y eventos.

Las declaraciones de relleno utilizan direccionamiento relativo para encontrar el valor correcto. Por ejemplo, el texto del 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 largas r y c en la fila y columna de Target

r = Target.Row

c = Target.Column

Target es el parámetro pasado que identifica la dirección de la celda. Si hace doble clic en el valor de la fila 3, r es igual a 3. Si hace doble clic en un valor de la columna C, c también es 3. Al restar 1 de 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, esa es la columna Tarea (columna B). Debido a que configuramos r y c con anticipación, solo necesita cambiar los valores reales para identificar la posición relativa de los datos de relleno.

Los ajustes de Inicio y Fin son un poco más complejos porque se adaptan a 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. Del mismo modo, End es la fecha y la hora de finalización. Observe que el comienzo y el final fecha use la misma referencia porque el evento no se extiende más allá de un día. Al hacer referencia a la hora, deberá actualizar los valores (1 y 2) en consecuencia para identificar las celdas que contienen esos valores.

El evento Display muestra el formulario, que se rellena previamente con los valores apropiados de la tabla.

Las últimas declaraciones destruyen los objetos y salen del submarino. El siguiente controlador de errores muestra un mensaje de error (Figura C) sólo cuando se llama. Es posible que desee agregar mensajes de error más específicos, pero este código simple podría ser adecuado.

Al principio, el procedimiento parece un poco desalentador, pero como he demostrado, es más simple de lo que te imaginas con solo un vistazo. La mayor parte es declarar y definir objetos y variables. Los archivos de demostración deberían funcionar bien para usted, con la excepción de cualquier error no contabilizado en el formato .xls. Al aplicar el procedimiento a su propio trabajo, deberá actualizar algunas declaraciones, pero he identificado esos puntos para usted.

Fuente

Written by TecTop

¿Buscas algo diferente?, Seis juegos Indie que llegarán este año por Steam parte 2

Xiaomi renueva su Game Space con estas novedades