vincular una tabla rellenar plantilla pasar insertar enlazar desde datos como automaticamente ajustar excel vba excel-vba ms-word

una - Abra la plantilla de Word, pegue los datos de Excel y guárdelos



vincular datos de excel a word (2)

Pruebe documents.add en lugar de documents.open

Abrirá una instancia de la plantilla, en lugar de la plantilla misma

Tengo un rango de datos de Excel que necesito para pegar en una plantilla de documento de Word y guardar automáticamente usando una macro de Excel.

Actualmente, cuando se ejecuta, me dice que el archivo de la plantilla ya está abierto / bloqueado y que tengo que abrir una copia de solo lectura para que continúe. Crea y guarda el archivo de palabras, pero cuando intento abrir el documento guardado dice que hay problemas con los contenidos.

Busqué en Google y creo que estoy cerca, pero si alguien me puede dar algunos consejos que serán apreciados.

Option Explicit Sub CopyExcelDataToWord2() Dim wdApp As New Word.Application Dim wdDoc As Word.Document Dim wsSource As Excel.Worksheet Dim docWordTarget As Object Dim SaveAsName As String Dim customSavePath As String Dim nameFile, WordName2 Dim ColRange As Range Set wdDoc = wdApp.Documents.Open("C:/test/templ.dotx") wdApp.Visible = True ''Cell with the filename to save final doc as nameFile = Sheets("Form").Cells(70, 1).Value ''Gets the file path from cell and adds variable ''nameFile'' value to the end customSavePath = Worksheets("Form").Cells(57, 1).Value & "/" & nameFile & ".docx" ''sets the variable wsSource to the activesheet Set wsSource = ThisWorkbook.ActiveSheet Set ColRange = Sheets("Form").Range("A1:D54") ''if no data is selected then exit sub If ColRange Is Nothing Then Exit Sub ''sets variable WordName2 to the selected columns address Else ''sets variable WordName2 to column Range WordName2 = ColRange.Address End If ''With word document make visible and select With wdApp .Visible = True Set docWordTarget = .Documents.Open("C:/test/templ.dotx") .ActiveDocument.Select End With ''With excel workbook copy the column selected previously With wsSource .Range(WordName2).Copy End With ''Paste data into word doc With wdApp.Selection .PasteExcelTable linkedtoexcel:=False, wordformatting:=False, RTF:=False .TypeParagraph End With With wdApp ''Save word doc in the custom save path .ActiveDocument.SaveAs Filename:=customSavePath .ActiveWindow.Close '' Kill the Object .Quit End With MsgBox "Exported To:" & vbNewLine & vbNewLine & (customSavePath) Set docWordTarget = Nothing Set wdApp = Nothing Application.CutCopyMode = False End Sub


En primer lugar, está recibiendo un error de bloqueo porque la instancia de la palabra todavía se está ejecutando en segundo plano y bloqueando el archivo que está intentando volver a abrir. Puede verificar eso con el administrador de tareas. Para evitar este error, puede:

  • matar el proceso WinWord.exe en el administrador de tareas
  • use wdApp.documents.Add en lugar de .open

O (mejor)

  • Escriba una función que ejecute la aplicación de palabras en segundo plano o, si no tiene ninguna, cree una nueva. Esta es la mejor opción de IMO, ya que no tendrá el riesgo de tener muchos procesos de Word invisibles ejecutándose en segundo plano.

    Private Function GetWordApp() As Word.Application On Error Resume Next Set GetWordApp = GetObject(, "Word.Application") If GetWordApp Is Nothing Then Set GetWordApp = New Word.Application End Function