es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Exportando datos específicos de Excel desde múltiples campos a Word

Permítanme comenzar diciendo que soy muy nuevo en VBA, por lo que cualquier ayuda es apreciada.
Alguien se acercó a mí para ver si puedo crear un nivel básico de automatización.
La necesidad es exportar datos de Excel a Word al presionar un botón.

El objetivo final es tener campos de datos dentro de Excel como “Nombre”, “Apellido”, “Dirección” y “Número de contacto”. Luego, seleccionar una fila completa de una persona (B1, B2, B3, B4) y cuando se presione el botón de Macro, se abrirá un documento de Word y completará automáticamente los campos en el documento. Se trata de completar cartas para enviarlas, esta persona también ha indicado que la combinación de correspondencia no hace lo que necesitan. A continuación se muestra con lo que estoy trabajando.

Sub ExcelToWord()
Dim wordApp As Word.Application
Dim mydoc As Word.Document

Set wordApp = New Word.Application
wordApp.Visible = True
Set mydoc = wordApp.Documents.Add()
ThisWorkbook.Worksheets("sheet1").Range("").Copy
mydoc.Paragraphs(1).Range.PasteExcelTable _
                           LinkedToExcel:=False, _
                           WordFormatting:=False, _
                           RTF:=False
mydoc.SaveAs2 "MyDoc"

End Sub

Esto permite especificar un rango específico como (A2, B3), sin embargo, no el área “Seleccionada”.
Lamento si esto es muy básico, pero como dije, no uso mucho VBA.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para exportar datos de Excel a Word con un solo botón y completar previamente los campos de datos dentro del documento de Word usando VBA, el código se puede modificar de la siguiente manera:

    Sub ExcelToWord()
        Dim wordApp As Word.Application
        Dim mydoc As Word.Document
        Dim selectedRow As Range
        Dim firstName As String, surname As String, address As String, contactNumber As String
    
        Set wordApp = New Word.Application
        wordApp.Visible = True
        Set mydoc = wordApp.Documents.Add()
    
        Set selectedRow = Selection.EntireRow 'seleccionar la fila completa de la celda activa
        firstName = selectedRow.Cells(1, 1).Value 'obtener los valores de las celdas seleccionadas
        surname = selectedRow.Cells(1, 2).Value
        address = selectedRow.Cells(1, 3).Value
        contactNumber = selectedRow.Cells(1, 4).Value
    
        With mydoc.Content 'rellenar los campos en el documento de Word
            .Controls.Add wdFieldFormTextInput 'agregar un campo de entrada de texto para el nombre
            .Controls(.Controls.Count).Title = "Nombre"
            .Controls(.Controls.Count).Result = firstName
    
            .Controls.Add wdFieldFormTextInput 'agregar un campo de entrada de texto para el apellido
            .Controls(.Controls.Count).Title = "Apellido"
            .Controls(.Controls.Count).Result = surname
    
            .Controls.Add wdFieldFormTextInput 'agregar un campo de entrada de texto para la dirección
            .Controls(.Controls.Count).Title = "Dirección"
            .Controls(.Controls.Count).Result = address
    
            .Controls.Add wdFieldFormTextInput 'agregar un campo de entrada de texto para el número de contacto
            .Controls(.Controls.Count).Title = "Número de contacto"
            .Controls(.Controls.Count).Result = contactNumber
        End With
    
        mydoc.SaveAs2 "MiDoc"
        Set wordApp = Nothing 'liberar el objeto Aplicación de Word de la memoria
    End Sub
    

    Este código selecciona la fila completa de la celda activa, obtiene los valores de las celdas seleccionadas y los completa en campos de entrada de texto en el documento de Word usando el bloque With mydoc.Content. La propiedad Selected se utiliza para seleccionar la fila completa y la propiedad Cells se utiliza para obtener los valores de las celdas seleccionadas. El método Controls.Add se utiliza para agregar campos de entrada de texto con títulos y resultados especificados mediante las propiedades Title y Result, respectivamente. Finalmente, el objeto Aplicación de Word se libera de la memoria utilizando la instrucción Set wordApp = Nothing.

Comments are closed.