Id. de artículo: 306682 - Última revisión: miércoles, 17 de enero de 2007 - Versión: 4.4

Cómo ejecutar macros de Office con automatización de Visual Basic .NET

Para obtener una versión de Microsoft Visual C# .NET de este artículo, consulte 306683  (http://support.microsoft.com/kb/306683/ ) .
Para obtener una versión de Microsoft Visual C++ de este artículo, consulte 306686  (http://support.microsoft.com/kb/306686/ ) .

En esta página

Expandir todo | Contraer todo

Resumen

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.

Más informació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

  1. Cree un documento de Word llamado C:\Doc1.doc. Para ello, siga estos pasos:
    1. En Word, cree un documento nuevo.
    2. Presione ALT+F11 para abrir el Editor de Visual Basic.
    3. En el menú Insertar, haga clic en Módulo.
    4. 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
    5. Cierre el editor de Visual Basic, guarde el documento de Word y cierre Word.
  2. Cree un libro de Excel llamado C:\Book1.xls; para ello, siga pasos similares a los indicados para crear el documento de Word.
  3. Cree una presentación de PowerPoint llamada C:\Pres1.xls; para ello, siga pasos similares a los indicados para crear el documento de Word.
  4. Crear una base de datos nueva de Access llamada C:\Db1.mdb. Para ello, siga estos pasos:
    1. En el menú Insertar, haga clic en Módulo.
    2. Pegue el código de macro siguiente en el nuevo módulo.
    3. Guarde el módulo y cierre Access.

Crear el cliente de Automatización de Visual Basic .NET

  1. 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.
  2. Agregar una referencia a Access, Excel, PowerPoint y a bibliotecas de objetos de Word. Para ello, siga estos pasos:
    1. En el menú Proyecto, haga clic en Agregar referencia.
    2. 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
    3. Repita el paso anterior para Access, Excel y las bibliotecas de objetos de PowerPoint.
    4. 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 .

      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".
  3. En el menú Ver , haga clic en Caja de herramientas. Agregar un cuadro combinado y un botón a Form1.
  4. Haga doble clic en Button1 para generar una definición para el controlador de sucesos Click del botón.
  5. 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() 
  6. 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.
  7. 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
    					
  8. Agregue el código siguiente al principio de Form1.vb:
    Imports Access = Microsoft.Office.Interop.Access
    Imports Excel = Microsoft.Office.Interop.Excel
    Imports Word = Microsoft.Office.Interop.Word
    Imports PowerPoint = Microsoft.Office.Interop.PowerPoint
    					

Ejecutar y probar el cliente de Automatización

  1. Presione la tecla F5 para ejecutar la aplicación.
  2. 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.

Solución de problemas

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

Referencias

Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
303871  (http://support.microsoft.com/kb/303871/ ) Cómo crear una macro de Excel con Automatización desde Visual Basic .NET
177760  (http://support.microsoft.com/kb/177760/ ) ACC97: Cómo ejecutar macros en otros programas de Office
Para obtener más información y recursos acerca de la Automatización de Office, visite los siguientes sitios Web de Microsoft:
Microsoft Office Development with Visual Studio
http://msdn.microsoft.com/library/en-us/dnoxpta/html/vsofficedev.asp (http://msdn.microsoft.com/library/en-us/dnoxpta/html/vsofficedev.asp)

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)

La información de este artículo se refiere a:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Office Access 2003
  • Microsoft Office Excel 2003
  • Microsoft Office PowerPoint 2003
Palabras clave: 
kbautomation kbhowto KB306682
 

Seleccione idioma