Este artículo paso a paso describe cómo llamar a las macros
de Office desde un cliente de automatización Visual Basic .NET.
Con la
Automatización de Microsoft Office, es posible abrir un documento o crear uno
nuevo que contenga una macro de Visual Basic para aplicaciones (VBA) y ejecutar
dicha macro en tiempo de ejecución.
El cliente de Automatización del ejemplo siguiente actúa
sobre un servidor de Automatización de Office (Access, Excel, PowerPoint o
Word) en función de lo que se seleccione en un formulario. Después de iniciar
el servidor de Automatización, el cliente abre un documento e invoca dos
macros. La primera, DoKbTest, no tiene parámetros y la segunda,
DoKbTestWithParameter, tiene un único parámetro de tipo String.
Crear documentos de oficina que contengan macros
Cree un documento de Word llamado C:\Doc1.doc. Para ello,
siga estos pasos:
En Word, cree un documento nuevo.
Presione ALT+F11 para abrir el Editor de Visual
Basic.
En el menú Insertar, haga clic en Módulo.
Pegue el siguiente código de macro en el nuevo módulo:
'Display a message box that displays the application name.
Public Sub DoKbTest()
MsgBox "Hello from " & Application.Name
End Sub
'Display a message box with the string passed from the
'Automation client.
Public Sub DoKbTestWithParameter( sMsg As String )
MsgBox sMsg
End Sub
Cierre el editor de Visual Basic, guarde el documento
de Word y cierre Word.
Cree un libro de Excel llamado C:\Book1.xls; para ello,
siga pasos similares a los indicados para crear el documento de
Word.
Cree una presentación de PowerPoint llamada C:\Pres1.xls;
para ello, siga pasos similares a los indicados para crear el documento de
Word.
Crear una base de datos nueva de Access llamada C:\Db1.mdb.
Para ello, siga estos pasos:
En el menú Insertar, haga clic en Módulo.
Pegue el código de macro siguiente en el nuevo
módulo.
Guarde el módulo y cierre Access.
Crear el cliente de Automatización de Visual Basic .NET
Inicie Microsoft Visual Studio .NET. En el menú Archivo, haga clic en Nuevo y, después, en Proyecto. Seleccione Aplicación para Windows en los tipos de proyectos de Visual Basic. De forma
predeterminada, se crea Form1.
Agregar una referencia a Access, Excel, PowerPoint y a
bibliotecas de objetos de Word. Para ello, siga estos pasos:
En el menú Proyecto, haga clic en Agregar referencia.
En la ficha COM, busque la Biblioteca de objetos de Microsoft Word 10.0 o la Biblioteca de objetos de Microsoft Word 11.0 y, a continuación, haga clic en Seleccionar.
Nota Si está utilizando Microsoft Office XP y aún no lo ha hecho,
Microsoft recomienda que descargue y, a continuación, instale los ensamblados
de interoperabilidad primarios de Microsoft Office XP (PIA).
Para obtener información adicional acerca de los PIA de
Office XP, haga clic en el siguiente número de artículo para verlo en Microsoft
Knowledge Base:
328912
(http://support.microsoft.com/kb/328912/
)
Hay disponibles ensamblados de interoperabilidad primarios (PIA) de Microsoft Office XP para descargar
Repita el paso anterior para Access, Excel y las
bibliotecas de objetos de PowerPoint.
En el cuadro de diálogo Agregar referencias, haga clic en Aceptar para aceptar sus selecciones. Si aparece un mensaje para generar
contenedores para las bibliotecas seleccionadas, haga clic en Sí.
Nota Si recibe un mensaje de error cuando haga referencia a la
biblioteca de objetos de Access 10.0, consulte la sección "Solución de
problemas".
En el menú Ver , haga clic en Caja de herramientas. Agregar un cuadro combinado y un botón a Form1.
Haga doble clic en Button1 para generar una definición para el controlador de sucesos Click
del botón.
Pegue el código siguiente en el procedimiento
Button1_Click:
Select Case ComboBox1.SelectedItem
Case "Access"
Dim oAccess As Access.ApplicationClass
'Start Access and open the database.
oAccess = CreateObject("Access.Application")
oAccess.Visible = True
oAccess.OpenCurrentDatabase("c:\db1.mdb", False)
'Run the macros.
oAccess.Run ("DoKbTest")
oAccess.Run("DoKbTestWithParameter", "Hello from VB .NET Client")
'Clean-up: Quit Access without saving changes to the database.
oAccess.DoCmd().Quit (Access.AcQuitOption.acQuitSaveNone)
System.Runtime.InteropServices.Marshal.ReleaseComObject (oAccess)
oAccess = Nothing
Case "Excel"
Dim oExcel As Excel.ApplicationClass
Dim oBook As Excel.WorkbookClass
Dim oBooks As Excel.Workbooks
'Start Excel and open the workbook.
oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
oBooks = oExcel.Workbooks
oBook = oBooks.Open("c:\book1.xls")
'Run the macros.
oExcel.Run ("DoKbTest")
oExcel.Run("DoKbTestWithParameter", "Hello from VB .NET Client")
'Clean-up: Close the workbook and quit Excel.
oBook.Close (False)
System.Runtime.InteropServices.Marshal.ReleaseComObject (oBook)
oBook = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject (oBooks)
oBooks = Nothing
oExcel.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject (oExcel)
oExcel = Nothing
Case "PowerPoint"
Dim oPP As PowerPoint.ApplicationClass
Dim oPresSet As PowerPoint.Presentations
Dim oPres As PowerPoint.PresentationClass
'Start PowerPoint and open the presentation.
oPP = CreateObject("PowerPoint.Application")
oPP.Visible = True
oPresSet = oPP.Presentations
oPres = oPresSet.Open("c:\pres1.ppt", , , True)
'Run the macros.
oPP.Run ("'pres1.ppt'!DoKbTest")
oPP.Run("'pres1.ppt'!DoKbTestWithParameter", "Hello from VB .NET Client")
'Clean-up: Close the presentation and quit PowerPoint.
oPres.Close()
System.Runtime.InteropServices.Marshal.ReleaseComObject (oPres)
oPres = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject (oPresSet)
oPresSet = Nothing
oPP.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject (oPP)
oPP = Nothing
Case "Word"
Dim oWord As Word.ApplicationClass
'Start Word and open the document.
oWord = CreateObject("Word.Application")
oWord.Visible = True
oWord.Documents.Open ("C:\Doc1.doc")
'Run the macros.
oWord.Run ("DoKbTest")
oWord.Run("DoKbTestWithParameter", "Hello from VB .NET Client")
'Quit Word.
oWord.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject (oWord)
oWord = Nothing
End Select
GC.Collect()
En el menú Ver, haga clic en Diseñador y haga doble clic en Form1 para generar una definición para el suceso de Carga del
formulario.
Pegue el código siguiente en el procedimiento
Button1_Click:
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
Dim a As String() = {"Access", "Excel", "PowerPoint", "Word"}
ComboBox1.Items.AddRange(a)
ComboBox1.SelectedIndex = 0
Agregue el código siguiente al principio de Form1.vb:
Seleccione una aplicación de Office en ComboBox1 y, a continuación, haga clic en Button1. Se inicia la aplicación de Office que seleccionó y se ejecutan
las macros DoKBTest y DoKBTestWithParameter.
Cuando se hace referencia a la biblioteca de objetos de Access
10.0 en un proyecto de Visual Basic .NET, es posible que aparezca un mensaje de
error indicando que la conversión de la librería a un ensamblado .NET produjo
un error.
Para obtener más
información sobre cómo resolver este problema para que pueda hacer referencia
correctamente a la biblioteca de objetos de Access 10.0, haga clic en el
siguiente número de artículo para verlo en Microsoft Knowledge Base:
317157
(http://support.microsoft.com/kb/317157/
)
PRB: Errores al hacer referencia a la biblioteca de tipos de Access 10.0 con Visual Studio .NET
Preguntas más frecuentes y cuestiones destacadas para el desarrollo de Office http://msdn.microsoft.com/office/
(http://support.microsoft.com/?scid=http%3a%2f%2fsupport.microsoft.com%2fsupport%2fofficedev%2f)
Proporcione sus comentarios acerca de esta información
¿Esta información le ayudó a resolver su problema?
Sí
No
No lo sé
¿La información era relevante?
Sí
No
¿Qué podemos hacer para mejorar esta información?
Para proteger su privacidad, no incluya información de contacto en los comentarios.
¡Muchas gracias! Sus comentarios nos ayudarán a mejorar los contenidos de soporte. Para más opciones de asistencia, visite la página de Ayuda y soporte técnico.