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
------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...
Un abrazo
Emilio
"Búho" <pacoQU...@nemo.es> escribió en el mensaje
news:OIJ2obBfCHA.2572@tkmsftngp12...
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>...
--
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...
Puedo esperar... y muchas gracias
Un abrazo
Emilio
"Búho" <pacoQU...@nemo.es> escribió en el mensaje
news:OLNdqgDfCHA.2256@tkmsftngp12...