Access - Guardar un documento Word con VBA

   
Vista:

Guardar un documento Word con VBA

Publicado por Miguel (51 intervenciones) el 19/02/2015 12:14:22
Buenas a tod@s.

Utilizo una plantilla de word para generar un documento desde un formulario.
Para generarlo uso una tabla intermedia que me reemplaza los campos.
Lo que necesito es que en el código que ahora os muestro, además, me guarde ese documento en una ruta concreta, con un nombre genérico como "nuevo documento".
La razón es porque los usuarios abrirán la base de datos con runtime y el documento con el visor word viewer, que no permite guardarlo; ahora bien, si por código lo puedo guardar, luego lo puedo abrir con p.e. LibreOfficce o similar.

El código que tengo es el siguiente: (la tabla de valores es: ReemplazaCertificado y la plantilla: certificado.dot)

Private Sub Comando367_Click()
Dim dbLocal As Database
Dim snpReplaceCodes As Recordset
Dim strCurrAppDir As String
Dim strFinalDoc As String
Dim varReplaceWith As Variant
Dim docWord As Word.Document

On Error GoTo Error_cmdCreateLetter_Click
Set dbLocal = CurrentDb()
strCurrAppDir = Left$(dbLocal.Name, InStrRev(dbLocal.Name, "\"))

strFinalDoc = strCurrAppDir & "certificado.dot"

On Error GoTo Error_cmdCreateLetter_Click
Set appWord = New Word.Application
Set docWord = appWord.Documents.Add(strFinalDoc)
appWord.Visible = True
'abro ahora la tabla de las sustituciones
Set snpReplaceCodes = dbLocal.OpenRecordset("ReemplazaCertificado", _
dbOpenSnapshot)

Do While Not snpReplaceCodes.EOF


varReplaceWith = Eval(snpReplaceCodes!ReplaceWithFieldName)
varReplaceWith = IIf(IsNull(varReplaceWith), " ", CStr(varReplaceWith))

With docWord.Content.Find

If snpReplaceCodes!CodeToReplace = "{MOVIETITLE}" Then
With .Replacement
.ClearFormatting
.Font.Bold = True
.Font.Italic = True
End With
End If

.Execute FindText:=snpReplaceCodes!CodeToReplace, _
ReplaceWith:=varReplaceWith, Format:=True, _
Replace:=wdReplaceAll

End With

snpReplaceCodes.MoveNext

Loop

snpReplaceCodes.Close

Exit Sub

Error_cmdCreateLetter_Click:

Beep
' MsgBox "Ha ocurrido el error:" & vbCrLf & _
' Err.Description, vbCritical, "OLE Error!"
Exit Sub
End Sub




Gracias por adelantado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Guardar un documento Word con VBA

Publicado por Miguel (51 intervenciones) el 19/02/2015 15:05:25
Antes del
Exit Sub
he colodado:

ActiveDocument.SaveAs FileName:="D:\Balsas\Ducumentos\Certificado.doc"

Exit Sub

Error_cmdCreateLetter_Click:

Beep
' MsgBox "Ha ocurrido el error:" & vbCrLf & _
' Err.Description, vbCritical, "OLE Error!"
Exit Sub
End Sub

Pero me deja guardarlo sólo una vez; supongo que es porque la plantilla se queda abierta a la vez que la aplicación word;
cómo lo cierro??

Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Manuel

Guardar un documento Word con VBA

Publicado por Manuel (41 intervenciones) el 21/02/2015 16:34:19
Es que tienes que desalojar el Word cerrandolo:
ActiveWindow.Close

Por otro lado, o pregunta que nombre quieres ponerle o lo generas dinámicamente... no puedes guardar en mismo destino 2 documentos con mismo nombre... y tu tienes el código que pones siempre el mismo nombre.

espero haberte ayudado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Guardar un documento Word con VBA

Publicado por Miguel (51 intervenciones) el 22/02/2015 18:03:52
Muchas Gracias.
Al final lo he solucionado con:

docWord.SaveAs2 FileName:="D:\Balsas\Ducumentos\Certificado.doc"
docword.close
appword.quit

Para usar SaveAs2 he tenido que instalar Officce 2007 y después cierro Word y la aplicación.

Ahora lo importante es que al quitar el Officce e instalar runtime y visor de word, me siga funcionando igual. Al probar, me pide la una referencia al archivo:

MSWORD.OLB version 8.4

Qué debo hacer? Cómo debo registrarla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar