Controlar una aplicación de Microsoft Office desde otra

Si desea ejecutar código de una aplicación de Microsoft Office que trabaje con los objetos de otra aplicación, siga estos pasos.

Para ejecutar el código

  1. Establezca una referencia a la biblioteca de tipos de la otra aplicación en el cuadro de diálogo Referencias (menú Herramientas). A continuación, los objetos, las propiedades y los métodos aparecen en el Examinador de objetos, y la sintaxis se comprobará en tiempo de compilación. Además, puede obtener Ayuda contextual acerca de estos elementos.

  2. Declare como tipos específicos las variables de objeto que harán referencia a los objetos de la otra aplicación. Cualifique cada tipo con el nombre de la aplicación que proporciona el objeto. Por ejemplo, la siguiente instrucción declara una variable que señala un documento de Microsoft Word y otra que hace referencia a un libro de Microsoft Excel.

      Dim appWD As Word.Application, wbXL As Excel.Workbook
    

    Nota Debe seguir los pasos anteriores si desea que el código sea de enlace en tiempo de compilación.

  3. Use la función CreateObject con los identificadores programáticos OLE del objeto con el que desee trabajar en otra aplicación, como se muestra en el siguiente ejemplo. Si desea ver la sesión de la otra aplicación, establezca la propiedad Visible en True.

      Dim appWD As Word.Application 
    
    Set appWD = CreateObject("Word.Application") 
    appWd.Visible = True
    
  4. Aplique las propiedades y métodos al objeto contenido en la variable. Por ejemplo, la siguiente instrucción crea un nuevo documento de Word.

    Dim appWD As Word.Application 
    
    Set appWD = CreateObject("Word.Application") 
    appWD.Documents.Add
    
  5. Una vez finalizado el trabajo con la otra aplicación, use el método Quit para cerrarla y, a continuación, establezca la variable de objetos como Nothing para liberar cualquier memoria que esté usando, como muestra el siguiente ejemplo.

    appWd.Quit 
    Set appWd = Nothing
    

Código de ejemplo proporcionado por: Bill Jelen, MrExcel.com El siguiente ejemplo de código crea un nuevo archivo Microsoft Office Word para cada fila de datos de una hoja de cálculo.

' You must pick Microsoft Word Object Library from Tools>References
' in the VB editor to execute Word commands.
Sub ControlWord()
    Dim appWD As Word.Application
    ' Create a new instance of Word and make it visible
    Set appWD = CreateObject("Word.Application.12")
    appWD.Visible = True

    ' Find the last row with data in the spreadsheet
    FinalRow = Range("A9999").End(xlUp).Row
    For i = 1 To FinalRow
        ' Copy the current row
        Worksheets("Sheet1").Rows(i).Copy
        ' Tell Word to create a new document
        appWD.Documents.Add
        ' Tell Word to paste the contents of the clipboard into the new document.
        appWD.Selection.Paste
        ' Save the new document with a sequential file name.
        appWD.ActiveDocument.SaveAs Filename:="File" & i
        ' Close the new Word document.
        appWD.ActiveDocument.Close
    Next i
    ' Close the Word application.
    appWD.Quit
End Sub

Código de ejemplo proporcionado por: Dennis Wallentin, VSTO & .NET & Excel Este ejemplo toma los valores de celdas de un rango con nombre, W_Data, que contiene tres valores e inserta esos valores en un documento de Word. Los valores se insertan en las ubicaciones de marcador denominadas td1, td2, y td3. Para ejecutar este ejemplo, debe tener un rango denominado W_Data que contenga tres valores en Sheet1 del libro. Debe tener un documento de Word llamado Test.docx guardado en la misma ubicación que el libro de Excel y el documento de Word debe tener tres marcadores denominados td1, td2 y td3.

' You must pick Microsoft Word Object Library from Tools>References
' in the Visual Basic editor to execute Word commands.

Option Explicit

Sub Add_Single_Values_Word()
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdRange1 As Word.Range
Dim wdRange2 As Word.Range
Dim wdRange3 As Word.Range

Dim wbBook As Workbook
Dim wsSheet As Worksheet

Dim vaData As Variant

Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")

vaData = wsSheet.Range("W_Data").Value

' Instantiate the Word Objects.
Set wdApp = New Word.Application
Set wdDoc = wdApp.Documents.Open(wbBook.Path & "\Test.docx")

With wdDoc
    Set wdRange1 = .Bookmarks("td1").Range
    Set wdRange2 = .Bookmarks("td2").Range
    Set wdRange3 = .Bookmarks("td3").Range
End With

' Write values to the bookmarks.
wdRange1.Text = vaData(1, 1)
wdRange2.Text = vaData(2, 1)
wdRange3.Text = vaData(3, 1)

With wdDoc
    .Save
    .Close
End With

wdApp.Quit

' Release the objects from memory.
Set wdRange1 = Nothing
Set wdRange2 = Nothing
Set wdRange3 = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing

End Sub

Acerca de los colaboradores

Bill Jelen, MVP, es autor de más de veinticinco libros sobre Microsoft Excel. Es invitado habitual en TechTV con Leo Laporte y es el administrador de MrExcel.com, un sitio web que incluye más de 300 000 preguntas y respuestas sobre Excel.

Dennis Wallentin es el autor de VSTO & .NET & Excel, un blog que se centra en soluciones de .NET Framework para Excel y Excel Services. Dennis lleva más de veinte años desarrollando soluciones de Excel y es, además, coautor de "Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA and .NET (2nd Edition)".

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.