Código que funciona en el formulario pero no en un módulo
una vez más. A ver si me podéis orientar (algo que siempre habéis hecho y que os agradezco).
Veréis, la cuestión es la siguiente:
Desde un formulario tengo que mandar imprimir unas cartas (bueno, en realidad desde varios formularios, cada uno escribe un tipo de carta). Como quiera que mis jefes quieren que las cartas se impriman utilizando Word, hice lo siguiente:
El formulario desde el que mando imprimir las cartas (fprevoferta, p. Ejemplo) recoge toda la información que deberá aparecer en el escrito. Creo una plantilla en Word con un encabezado en el que va el logo de la empresa, el nombre y dirección de la tienda concreta que hace la oferta (son tres o cuatro tiendas las que tienen, no lo sé con seguridad ya que la familia está reñida y no sé si siguen siendo todas del mismo grupo o no...) y el título de la misma (p. Ejemplo "Ofertas de temporada"). Luego ya, en el cuerpo del documento van los datos del cliente y el texto en sí mismo (hablo de ofertas, pero también pueden ser informaciones con respecto a un pedido o notificaciones de otro tipo. En cualquier caso, el encabezado varía únicamente en el título, manteniéndose constante el resto) y, por último la firma que tengo guardada como imagen bmp en la base de datos al igual que el logo.
El logo, el título y el nombre de la tienda se colocan en una tabla de word en la que las celdas han sido dimensionadas conforme a nuestras pretensiones, al igual que la firma.
Una vez explicado esto os comento como hago:
En el formulario fprevoferta tengo un botón de comando con el siguiente código en el evento "al hacer click":
Dim word As New word.Application
Dim pruebarec As word.Document
Dim myrange As Range
Dim miruta As String
miruta = Application.CurrentProject.Path
& "\escritos\"
word.Visible
= True
Set escrito = word.Documents.Open(FileName:=miruta
& "ofertas.docx", ReadOnly:=True)
' Es a partir de aquí donde quiero introducir cambios
word.ActiveWindow.ActivePane.View.SeekView
= wdSeekCurrentPageHeader
With word.ActiveWindow.Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "#título#"
.Replacement.Text = titulo
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
word.ActiveWindow.Selection.Find.Execute
With word.ActiveWindow.Selection
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseStart
Else
.Collapse Direction:=wdCollapseEnd
End If
.Find.Execute Replace:=wdReplaceOne
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseEnd
Else
.Collapse
Direction:=wdCollapseStart
End If
.Find.Execute
End With
With word.ActiveWindow.Selection.Find
.Text = "#logo#"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
word.ActiveWindow.Selection.Find.Execute
With word.ActiveWindow.Selection
If .Find.Forward = True Then
.Collapse
Direction:=wdCollapseStart
Else
.Collapse Direction:=wdCollapseEnd
End If
.Find.Execute Replace:=wdReplaceOne
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseEnd
Else
.Collapse
Direction:=wdCollapseStart
End If
.Find.Execute
.InlineShapes.AddPicture FileName:= _
logo.Value, LinkToFile:= _
False, SaveWithDocument:=True
End With
With word.ActiveWindow.Selection.Find
.Text = "#nombretienda#"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
word.ActiveWindow.Selection.Find.Execute
With word.ActiveWindow.Selection
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseStart
Else
.Collapse Direction:=wdCollapseEnd
End If
.Find.Execute Replace:=wdReplaceOne
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseEnd
Else
.Collapse
Direction:=wdCollapseStart
End If
.Find.Execute
.InlineShapes.AddPicture FileName:= _
nombretienda.Value, LinkToFile:= _
False, SaveWithDocument:=True
End With
word.ActiveWindow.ActivePane.View.SeekView
= wdSeekMainDocument
Set myrange
= word.ActiveDocument.Content
With myrange.Find
.ClearFormatting
.Text = "#texto#"
.Forward = True
.Wrap = wdFindContinue
Do While .Execute
myrange.Text =ftexto
Loop
End With
With
myrange.Find
.ClearFormatting
.Text = "#firma#"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
myrange.Find.Execute
myrange.InlineShapes.AddPicture FileName:=
_
RUBRICA.Value, LinkToFile:= _
False, SaveWithDocument:=True
Si lo ejecuto desde el formulario funciona bien, ahora bien si lo coloco en un módulo a partir de la línea que he indicado y luego llamo a la función, funciona una vez sí y otra no alternativamente: me da un mensaje del tipo "el equipo servidor remoto está desconectado" o algo así, pero si cierro ese mensaje y vuelvo a pinchar en el botón de comando, vuelve a funcionar. ¿A qué puede deberse? Más que nada es para no tener que repetir el código en todos los formularios en los que tengo que usarlo.
Gracias por vuestra atención y perdón por el "tocho" que os he metido aquí.