Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Imprimir desde access en plantilla de word

1,759 views
Skip to first unread message

Canary Software

unread,
Oct 25, 2002, 4:01:47 AM10/25/02
to
Saludos cordiales:

Explico lo que quiero hacer....

Tengo un formulario con un botón de comando. Lo que quiero hacer es haciendo
click en ese botón, que
me imprima directamente por la impresora (sin abrir Word) cartas en serie
basándome en una consulta o
en una tabla.

Pongamos un ejemplo sencillo:
Tengo 100 clientes.
Y hago una plantilla en Word asi...
{NOMBRE}
{DIRECCION]

Estimado:
{CONTACTO}

Le remitimos la siguiente carta para avisarle que tiene una deuda de:
{DEUDA}

Agradecidos por su atención saludos cordiales.....

Pues en este caso quiero que me imprima 100 cartas, y que recoja los datos
de la tabla o consulta que
yo le especifique.

Muchas gracias de antemano por su ayuda
Emilio


Búho

unread,
Oct 25, 2002, 7:14:38 AM10/25/02
to
Emilio, en mi pagina existe algo muy muy parecido a lo que pides.
Es un mismo ejemplo, donde hay dos formas de combinar correspondencia con
Word. En el primero, efectivamente, no te sirve, pues lo que hace es
escribir simplemente una serie de nombres extraidos de una recordset, en el
documento Word.
Pero el segundo sí.
Ante una plantilla de Word (En este caso un RTF) y antes unos elementos en
dicha planilla de la forma que indicas {NombreCliente} lo puedes hacer,
modificando un poco el codigo que en el ejemplo esta expuesto.
Sobre el codigo que veas en el ejemplo que te indico:
http://www20.brinkster.com/accessbhuo/id.asp?topico=14
cambias un poco por este:
strFinalDoc = strCurrAppDir & "DemoTest.rtf"
On Error GoTo Error_cmdCreateLetter_Click
Set appWord = New Word.Application
Set docWord = appWord.Documents.Add(strFinalDoc)
appWord.Visible = False

------resto de codigo

DoEvents
appWord.PrintOut

Cuando veas el codigo original y esta pequeña variacion, lo entenderas. Todo
esto lo metes en un bucle que recorra el recordset de clientes.

Joer, es que es dificil explicarlo en breves lineas...
Mi correo es el que aparece aqui, pero sin eso del Anti Spam si necesitas
alguna aclaracion.
Estoy convencido que te tiene que podria funcionar asi.

--
Saludos:
Francisco J. García Aguado
Web sobre Access y VBA
http://www20.brinkster.com/accessbhuo/
Mi Foro en las comunidades de Microsoft
http://groups.msn.com/Access2000VisualBasic/

"Canary Software" <come...@canarysoftware.com> escribió en el mensaje
news:apb4mb$s90$1...@nsnmrro2-gest.nuria.telefonica-data.net...

Canary Software

unread,
Oct 25, 2002, 7:56:20 AM10/25/02
to
Muchas gracias por tu respuesta.... voy a probarlo,,,, aunque desde ya te
digo que soy un poco o bastante torpe aún en esto de access.... seguramente
te consultaré a tu e-mail

Un abrazo
Emilio


"Búho" <pacoQU...@nemo.es> escribió en el mensaje
news:OIJ2obBfCHA.2572@tkmsftngp12...

CarCar

unread,
Oct 25, 2002, 11:32:55 AM10/25/02
to
Hola:

Lo siguiente lo envié al otro grupo de Access hace meses... copio y
pego.

Estaba hecho para imprimir y guardar faxes, pero servirá igual para
imprimir cartas parece que para tu caso sobrarían las instrucciones
finales.

AppWord.Visible = True
AppWord.ActiveDocument.SaveAs FileName
AppWord.WindowState = wdWindowStateMaximize

Que hacen el Word visible, salvan el documento y maximizan la ventana
del Word.

No puedo probarlo, estoy en un ordenador sin Access, te dejo el
trabajo a tí. ;-)

Deberás incluir la lectura de un Recordset y un bucle en el que vayas
leyendo los campos de la base de datos, de forma que las asignaciones
a los marcadores del Word se harán unos con campos del formulario y
otros desde los de los registros del Recordset.

Tal y como está el documento Word debe de ser una Plantilla, extensión
.dot, con marcadores.

Si tienes dudas sobre como implementarlo estamos aquí.

Requerimiento previo, incluir en el menú Herramientas -> Referencias
la de "Microsoft Word X.X Object Library"

En la plantilla deberás insertar "marcadores" que serán sustituidos
cuando se ejecute el procedimiento por el contenido del campo en la
base de datos.

En el procedimiento se hace uso tanto del "nombre" del marcador, como
del nombre del cuadro de texto del formulario o del nombre del campo
en el recordset.

En el procedimiento no se abre el objeto Word.Application al empezar,
por si ya existiera uno abierto, si no lo está (abierto) al intentar
asignar la plantilla, se produce un error controlado, que lo abre.

El procedimiento pregunta siempre si existe el nombre del marcador
Word, porque el procedimiento sirve para muchos tipos de Fax en los
que en unos casos hay unos marcadores y en otros no.

Saludos.


-------------Inicio de copia del
procedimiento-------------------------------

Private Sub CmdCombinar_Click()
On Error GoTo Err_cmdCombinar

Dim AppWord As Word.Application
Dim DocWord As Word.Document
Dim Resp As Long
'
' Variable con el nombre completo del fax a guardar.
'
Dim FileName As String
'
'Variable en la que se tiene u obtiene el nombre de la plantilla.
'
Dim Plantilla As String
'
' Variable en la que se tiene u obtiene el nombre del directorio de
los fax.
'
Dim DirFax As String

Plantilla = "C:\Plantillas\Plantilla.dot"
DirFax = "C:\Faxes\

'
' Abrir el Word utilizando la plantilla.
'
AppWord.Documents.Add Template:=Plantilla, NewTemplate:=False
Set DocWord = AppWord.ActiveDocument
'
' Comprobar existencia de un marcador llamado 'PersonaContacto', si
existe
' y el contenido del cuadro de texto del formulario no es nulo se
introduce
' en el documento.

If DocWord.Bookmarks.Exists("PersonaContacto") Then
If Not IsNull(PersonaContacto) Then
DocWord.Bookmarks("PersonaContacto").Select
Texto = PersonaContacto
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If

If DocWord.Bookmarks.Exists("CabeceraFax") Then
If Not IsNull(CabeceraFax) Then
DocWord.Bookmarks("CabeceraFax").Select
Texto = CabeceraFax
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If

If DocWord.Bookmarks.Exists("Fax") Then
If Not IsNull(Fax) Then
DocWord.Bookmarks("Fax").Select
Texto = Fax
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If

If DocWord.Bookmarks.Exists("Remite") Then
If Not IsNull(Remite) Then
DocWord.Bookmarks("Remite").Select
Texto = Remite
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If

If DocWord.Bookmarks.Exists("Remite2") Then
If Not IsNull(Remite) Then
DocWord.Bookmarks("Remite2").Select
Texto = Remite
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If

If DocWord.Bookmarks.Exists("Direccion1") Then
If Not IsNull(Direccion1) Then
DocWord.Bookmarks("Direccion1").Select
Texto = Direccion1
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If

If DocWord.Bookmarks.Exists("Direccion2") Then
If Not IsNull(Direccion2) Then
DocWord.Bookmarks("Direccion2").Select
Texto = Direccion2
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If

If DocWord.Bookmarks.Exists("Tlf") Then
If Not IsNull(Rs!Tlf) Then
DocWord.Bookmarks("Tlf").Select
Texto = Rs!Tlf
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If

If DocWord.Bookmarks.Exists("FechaFax") Then
DocWord.Bookmarks("FechaFax").Select
Texto = Format(Date, "dd/mm/yyyy")
DocWord.Application.Selection.TypeText Text:=Texto
End If

AppWord.Visible = True
AppWord.ActiveDocument.SaveAs FileName
AppWord.WindowState = wdWindowStateMaximize

Exit_cmdCombinar:
DoCmd.Hourglass False
Exit Sub

Err_cmdCombinar:

If Err = 91 Or Err = -2147023174 Then
Set AppWord = New Word.Application
Resume
End If

MsgBox Err & " " & Err.Description & Chr$(13) & Chr$(13) &
Plantilla
Resume Exit_cmdCombinar

End Sub

-------------------Fin del procedimiento
copiado-----------------------------

En este ejemplo el nombre que se puso a los marcadores en la plantilla
Word es el mismo que el que tenían los cuadros de texto en el
formulario pero pueden ser diferentes.

Si se necesita introducir la misma información en dos lugares
diferentes del fax, como ocurre en éste caso, debes definir dos
marcadores con dos nombres diferentes, aunque incluyas la misma
información.


"Canary Software" <come...@canarysoftware.com> wrote in message news:<apb4mb$s90$1...@nsnmrro2-gest.nuria.telefonica-data.net>...

Búho

unread,
Oct 25, 2002, 11:12:43 AM10/25/02
to
Emilio...¿Te corre mucha prisa?
Te lo digo por que es buena idea preparar un ejemplo real con lo que
indicas.
Pero estos dias ando muy mal de tiempo y de ganas.
A ver si este fin de semana preparo un ejemplo MDB para este caso concreto.
Y te aviso.
Buen 'finde' ¡¡¡

--
Saludos:
Francisco J. García Aguado
Web sobre Access y VBA
http://www20.brinkster.com/accessbhuo/

"Canary Software" <come...@canarysoftware.com> escribió en el mensaje
news:apbbh2$6th$1...@nsnmrro2-gest.nuria.telefonica-data.net...

Canary Software

unread,
Oct 25, 2002, 12:06:43 PM10/25/02
to
Ninguna prisa.... ya lo intente y me hice un lio...:-)))

Puedo esperar... y muchas gracias
Un abrazo
Emilio


"Búho" <pacoQU...@nemo.es> escribió en el mensaje
news:OLNdqgDfCHA.2256@tkmsftngp12...

0 new messages