Hola Angeles y Jessuss (aunque mi respuesta parece que no le va mucho a éste...)
Yo puede decirse que tengo precisamente la especialidad de hacer informes con Word desde VB, porque la mayoría de mis aplicaciones van dirigidas a la confección de informes personalizados (Alta Hospitalaria, por ejemplo)
Te adjunto una plantilla, que el usuario actualiza y modifica con Word siempre que quiera. Luego toma la plantilla que le convenga y se rellena automáticamente el informe haciendo sustitución de eso que llamo pseudomacros, y que consisten en 6 caracteres precedidos y seguidos de @. Por ejemplo @PACNOM@ para Nombre del paciente, @PACDOM@ para el Domicilio del paciente....
El usuario tiene una lista de todas las pseudomacros que puede incluir en cada plantilla, y en todo caso al hacer la conversión se preve que pueda haber incluido algún grupo NO RECONOCIBLE...
La conversión la hago así:
lFallo = False
MousePointer = vbHourglass
strText = ""
nHandle% = FreeFile
Open wFich For Input As #nHandle%
Do While Not EOF(nHandle%)
Line Input #nHandle%, strBuffer
strText = strText & strBuffer & vbCrLf
Loop
Close #nHandle%
If recPac!idsexo = 1 Then
cSex = "o"
Else
cSex = "a"
End If
Do While True
n = InStr(strText, "@")
If n = 0 Then Exit Do
cTit = " "
If Mid(strText, n, 1) = "@" Then
cMacro = UCase(Mid(strText, n, 8))
If cMacro = "@ANTFAM@" Then
If Trim(frmPaci.txtAf(0).Text) <> "" Then
cTit = frmPaci.txtAf(0).Text
End If
If Trim(frmPaci.txtAf(1).Text) <> "" Then
cTit = cTit & "; " & frmPaci.txtAf(1).Text
End If
ElseIf cMacro = "@ANTPER@" Then
If Trim(frmPaci.txtAp(0).Text) <> "" Then
cTit = frmPaci.txtAp(0).Text
End If
If Trim(frmPaci.txtAp(1).Text) <> "" Then
cTit = cTit & "; " & frmPaci.txtAp(1).Text
End If
If Trim(frmPaci.txtAp(2).Text) <> "" Then
cTit = cTit & "; " & frmPaci.txtAp(2).Text
End If
ELSEIF cMacro.........
Reviso a ver si se encuentra cada una de las macros que tengo diseñadas y defino por qué texto ha de ser sustituida...
If cTit = "" Then
x = MsgBox("El documento de 'Infor-Altas' estaba en blanco.", vbInformation)
cTit = " "
End If
recInf.Recordset.Delete
recInf.Recordset.Update
recInf.Recordset.Bookmark = recInf.Recordset.LastModified
Else
x = MsgBox("Revise la Plantilla " & SelFile.FileName & " :" & Chr(10) & _
"Ha introducido como ""macro"" la palabra " & cMacro & Chr(10) & _
"y no ha diseñado la SQL de conversión para tal ""macro"".", vbCritical)
lFallo = True
Exit Do
End If
End If
' AQUÍ SE SUSTITUYE LA PSEUDOMACRO POR LO QUE CADA UNA SIGNIFICA...
strPost = Mid(strText, n + 8)
strPrem = Left(strText, n - 1)
strText = strPrem & cTit & strPost
Loop
If lFallo Then
DeleteAFile (wFich)
wFich = ""
MousePointer = vbDefault
Exit Function
ElseIf Dir(tFich) <> "" Then
DeleteAFile (tFich)
End If
nHandle% = FreeFile
Open wFich For Output As #nHandle%
Print #nHandle%, strText
Close #nHandle%
MousePointer = vbDefault
Espero que puedas adaptar estos datos a tu programa y que la idea te sirva...
Y en todo caso sabes que estoy a tu disposición, con mi afectuoso saludo