Hoy en día, la mayoría del software se diseña para soportar al menos algún tipo de comunicación con otras aplicaciones. La mayoría de los programas de Windows soportan, como mínimo, el Portapapeles para las operaciones copiar y pegar entre aplicaciones. Muchos productos de Windows soportan Intercambio de datos dinámico (DDE).
En este artículo se destacan los tipos de operaciones de multitarea reales que soportan las aplicaciones de Excel. Desde luego, también se proporcionan diversos ejemplos en VBA de como llamar a diversas aplicaciones.
Ejecutar una aplicación usando VBA
A menudo es muy útil ejecutar otras aplicaciones desde Excel. Por ejemplo, se pueden ejecutar programas de comunicaciones, archivos ejecutables (*.exe) desde Excel, u otros que necesitemos.
Para lograr la ejecución de hace uso de la función Shell de VBA, la cual hace relativamente sencilla la invocación de otros programas.
Descargar todos los ejemplos mostrados a continuación: Ejemplos ejecutar aplicaciones desde VBA
Ejemplo de abrir aplicación desde VBA
El mapa de caracteres es una de muchas aplicaciones que se encuentran disponibles en la instalación de Windows, con el siguiente código en VBA veremos como ejecutar este programa.
Sub Ejecutar()
On Error Resume Next
Programa = "Charmap.exe"
idTarea = Shell(Programa, 1)
If Err <> 0 Then
MsgBox "No se puede iniciar " & Programa, vbCritical, "Error"
End If
End Sub
La ejecución de este código en VBA, llega a mostrar el mapa de caracteres:
La función Shell devuelve un número de identificación de tarea para la aplicación, este valor será útil sobre todo cuando tengamos varias aplicaciones, y queramos hacer referencia a una de ellas.
El segundo parámetro para la función Shell sirve para definir cómo se presenta la aplicación (1 es el código para una ventana de tamaño normal, con el foco).
En caso exista un problema al ejecutar la función Shell, se generará un error, el cual es controlado por medio de la instrucción On Error, el cual emite el Msgbox que observamos en el código en VBA.
La función Shell ejecuta la aplicación de forma asíncrona, es decir se ejecuta en paralelo, la ejecución de la macro continua de forma independiente a la aplicación invocada (luego de terminada la ejecución del código en VBA)
Evitar segunda instancia de una aplicación
En algunas aplicaciones, si se vuelve a llamar a la aplicación (la función Shell la llama de nuevo), se puede llegar a crear una segunda instancia (otra ventana de la misma aplicación).
Por medio de la siguiente código en VBA, se evitará la generación de una nueva instancia:
Sub aplicaciones()
On Error Resume Next
Programa = "calc.exe"
AppActivate ("Calculadora")
If Err <> 0 Then
Err = 0
idTarea = Shell(Programa, 0)
If Err <> 0 Then
MsgBox "No se puede iniciar " & Programa, vbCritical, "Error"
End If
End If
End Sub
La macro "Aplicaciones" usa la instrucción AppActivate para activar una aplicación que se está ejecutando (en este caso, la Calculadora de Windows). El argumento para AppActivate, es el título de la barra de Título de la aplicación, en este caso el título que tiene la aplicación es "Calculadora", si hay un error (es decir no existe una instancia de la aplicación), se ejecutará la función Shell un par de líneas después para llamar a la calculadora.
Ejemplo de llamado a Word con VBA
El siguiente código en VBA sirve para crear (ejecutar) una instancia de Word, hacer algunos cambios en el archivo creado, como colocar un texto centrado, y finalmente cerrar el archivo en Word.
Sub Crear_Word()
Set Aplicación = CreateObject("Word.Application")
With Aplicación
.Visible = True
.Documents.Add
.Selection.Font.Bold = True
.Selection.Font.Size = 32
.Selection.typetext "Informe de VBA"
.Selection.ParagraphFormat.Alignment = 1 ' 1 es para centrar
.Quit
End With
End Sub
Para poder examinar otros ejemplos de VBA y Office, puede examinar: Macros en Office