de Excel a campo en plantilla de Word

18/03/2008 - 17:10 por Manel | Informe spam
Estoy trabajando con Excel y Word 2003 SP2, creando una macro en un documento
Excel para crear un documento word a partir de una plantilla
(presupuesto.dot) ya definida, pero no se como asignar el valor de la celda
G24 de la hoja excel a un campo de la plantilla word llamado "ndias".
El código que he generado es el siguiente (copiando de aquí y de allí):

Sub Pressupost()
Dim adoc As Word.Application
Dim wdoc As Word.Document

Set adoc = CreateObject("Word.Application")

adoc.Visible = True
Set wdoc = adoc.Documents.Add("C:\Documents and Settings\Manel\Datos de
programa\Microsoft\Plantillas\Pressupost.dot")
adoc.DisplayAlerts = wdAlertsNone

' hasta aquí funciona bien (abre un .doc a partir de la plantilla .dot),
pero a partir
' de aquí la asignación no la hace, y estoy probando distintas sentencias,
tal
' como se puede apreciar

adoc.ActiveDocument.Variables("ndias").Value = Range("g24")
adoc.ActiveDocument.Fields.Update

' wdoc.Variables("ndias").Value = Range("g24")
' wdoc.Fields.Update
' Set wdoc = Nothing

End Sub

Agradezco de antemano el interés y por supuesto la ayuda que me podáis
prestar.


Manel
 

Leer las respuestas

#1 robertocm
05/07/2012 - 10:27 | Informe spam
Manel escribió el 18/03/2008 17:10 :
Estoy trabajando con Excel y Word 2003 SP2, creando una macro en un documento
Excel para crear un documento word a partir de una plantilla
(presupuesto.dot) ya definida, pero no se como asignar el valor de la celda
G24 de la hoja excel a un campo de la plantilla word llamado "ndias".
El código que he generado es el siguiente (copiando de aquí y de
allí):

Sub Pressupost()
Dim adoc As Word.Application
Dim wdoc As Word.Document

Set adoc = CreateObject("Word.Application")

adoc.Visible = True
Set wdoc = adoc.Documents.Add("C:Documents and SettingsManelDatos de
programaMicrosoftPlantillasPressupost.dot")
adoc.DisplayAlerts = wdAlertsNone

' hasta aquí funciona bien (abre un .doc a partir de la plantilla .dot),
pero a partir
' de aquí la asignación no la hace, y estoy probando distintas
sentencias,
tal
' como se puede apreciar

adoc.ActiveDocument.Variables("ndias").Value = Range("g24")
adoc.ActiveDocument.Fields.Update

' wdoc.Variables("ndias").Value = Range("g24")
' wdoc.Fields.Update
' Set wdoc = Nothing

End Sub

Agradezco de antemano el interés y por supuesto la ayuda que me
podáis
prestar.


Manel


Os Comento como hago esto:
En el documento de Word de "destino" inserto un campo del tipo DOCVARIABLE en cada posición en la que quiero copiar datos desde excel. La ventaja que encuentro en usar campos DOCVARIABLE en lugar de marcadores es al repetir el mismo dato en varios sitios del documento, podemos insertar varias veces el mismo campo DOCVARIABLE pero esto no parece posible con marcadores (Por ejemplo: para rellenar un contrato a partir de datos en excel algunos valores como los nombres de los contratantes aparecerán repetidos en varios sitios en el documento).

Esta es la macro en excel 2003 que utilizo para rellenar datos de contratos en word 2003:

Sub Practicas_Anexo_cubrir()

Dim wordApp As Object

RazonSocial = Cells(ActiveCell.Row, 15)
DataConvenioMarco = Cells(ActiveCell.Row, 14)
FechaInicio = Cells(ActiveCell.Row, 22)
FechaFin = Cells(ActiveCell.Row, 23)
NombreAlumno = Cells(ActiveCell.Row, 20)
DNIalumno = Cells(ActiveCell.Row, 21)
CargoFirma = Cells(ActiveCell.Row, 19)
NombreFirma = Cells(ActiveCell.Row, 18)

On Error Resume Next
Set wordApp = CreateObject("Word.Application")
wordApp.Documents.Open Filename:=ThisWorkbook.Path & "\PRACTICAS\Documentos\Anexo-Convenio-Plantilla.doc"

wordApp.ActiveDocument.Variables("RazonSocial").Value = RazonSocial
wordApp.ActiveDocument.Variables("DataConvenioMarco").Value = DataConvenioMarco
wordApp.ActiveDocument.Variables("FechaInicio").Value = FechaInicio
wordApp.ActiveDocument.Variables("FechaFin").Value = FechaFin
wordApp.ActiveDocument.Variables("NombreAlumno").Value = NombreAlumno
wordApp.ActiveDocument.Variables("DNIalumno").Value = DNIalumno
wordApp.ActiveDocument.Variables("CargoFirma").Value = CargoFirma
wordApp.ActiveDocument.Variables("NombreFirma").Value = NombreFirma

wordApp.ActiveDocument.Fields.Update


wordApp.Selection.Goto What:=0 'Vamos ó inicio do documento


'Esto sería usando marcadores en word pero resulta más cómodo con campos de tipo docvariable
'cuando repetimos texto en varios sitios de un documento
'With wordApp
'.Selection.Goto What:=-1, Name:="RazonSocial1" 'wdGoToBookmark
'.Selection.TypeText Text:=RazonSocial
'.Visible = True
'.Selection.Goto What:=-1, Name:="RazonSocial2" 'wdGoToBookmark
'.Selection.TypeText Text:=RazonSocial
'.Visible = True
'End With

'Mostrar ventana
wordApp.Visible = True

'Guardo el documento con otro nombre
wordApp.Documents("Anexo-Convenio-Plantilla.doc").SaveAs ThisWorkbook.Path & "\PRACTICAS\Anexo-" & Replace(NombreAlumno, " ", "_")

Set wordApp = Nothing

End Sub

Preguntas similares