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