
Guardar un documento Word con VBA
Publicado por Miguel (53 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
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


0