** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Combinar correspondencia Word y Access
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCombinar correspondencia Word y Access

 Responder Responder
Autor
Mensaje
JCB Ver desplegable
Nuevo
Nuevo


Unido: 15/Agosto/2017
Localización: España
Estado: Sin conexión
Puntos: 6
Enlace directo a este mensaje Tema: Combinar correspondencia Word y Access
    Enviado: 13/Octubre/2017 a las 20:23
Mi deseo es, mediante VBA, abrir un Word, sustituir en él una palabra de la primera línea por un campo de una consulta de una base de datos de Access, y combinar correspondencia con los registros de la consulta.
He intentado varias cosas pero no lo consigo. Después de mirar en muchos sitios de internet, a lo más que he llegado es al código que indico a continuación, pero al ejecutarlo se bloquea el ordenador, y en el Administrador de tareas aparece una línea que dice "Archivo en uso", que al eliminarla hace aparecer la tarea de Word (antes oculta). En fin no logro pasar de Mailmerge OpendataSource.
Agradeceré mucho una ayuda.

Private Sub Corresp_Click()
On Error GoTo Err_Corresp_Click

Dim WRD, WD, WDS, vent As Object
Dim fic As String, cual As Boolean

Set vent = Application.FileDialog(3)
vent.Title = "ARCHIVO BUSCADO"
vent.Filters.Clear
vent.Filters.Add "Archivos de Word", "*.docx; *.doc"
vent.FilterIndex = 1
If vent.Show = True Then
fic = vent.SelectedItems(1)
Else
MsgBox "NO EXISTE NINGÚN ARCHIVO PARA COMBINAR"
GoTo Exit_Corresp_Click
End If
cual = MsgBox("¿QUIERE COMBINAR PERSONAS (NO = COMBINAR CIUDADES)?", vbYesNo + vbDefaultButton1)
Set WRD = CreateObject("Word.Application")
Set WD = WRD.Documents.Open(fic)
With WD.MailMerge
.OpenDataSource Name:=CurrentDb.Name, ConfirmConversions:=False, AddToRecentFiles:=False, Revert:=False, Connection:="QUERY [TAB-" & IIf(cual = vbYes, "PERSONAS", "CIUDADES") & "]"
Set WDS = WD.Lines(1).Range.Select
If cual = vbYes Then
.Fields.Add Range:=WD.Range, Type:=wdFieldDatabase, Name:="Persona"
Else
.Fields.Add Range:=WD.Range, Type:=wdFieldDatabase, Name:="Ciudad"
End If
With WDS.Find
.ClearFormatting
.Replacement.ClearFormatting
.Execute FindText:=IIf(cual = vbYes, "Quien", "Donde"), Forward:=True
If WDS.Find.Found = True Then
.Execute ReplaceWith:=IIf(cual = vbYes, "Persona", "Ciudad"), Replace:=1, Forward:=True
End If
End With
.Destination = 0
.Execute Pause:=False
End With
WD.SaveAs direc & "combinado.docx"
WRD.Application.Quit

Exit_Corresp_Click:
Exit Sub

Err_Corresp_Click:
MsgBox Err.Description
Resume Exit_Corresp_Click

End Sub
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3283
Enlace directo a este mensaje Enviado: 14/Octubre/2017 a las 10:08
Hola.
Sin entrar en otras consideraciones.
El createobject("word.application") crea un word pero por defecto esta 'invisible'. Sí se quiere ver el word hay que añadir una linea parecida a:

wrd.application.visible=true

Con lo anterior, se supone, que ya se 'verá' el word y que errores se dan.
Por otra parte, cambiar sobre la marcha el nombre de un campo de word para cargarle distintos datos, resulta en un principio mas complicado que tener un nombre de acmpo fijo y en la consulta/s ( con un alias) de access cambiar los datos para ese nombre de campo word.
Espero que ayude a resolver la duda.
Ya comentas.
Un saludo a todos
Arriba
JCB Ver desplegable
Nuevo
Nuevo


Unido: 15/Agosto/2017
Localización: España
Estado: Sin conexión
Puntos: 6
Enlace directo a este mensaje Enviado: 14/Octubre/2017 a las 18:44
Muchas gracias por tu respuesta.
Voy a probar qué pasa al hacer visible la aplicación de Word, y qué errores da.

De todos modos, yo no tengo "campos de Word" en el Word: lo que busco es que un usuario no experto pueda escribir un texto en Word, poniendo en la primera línea del folio la palabra "quién" o "dónde" u otra semejante, y que dando a un botón de un formulario de una base de datos de Access te permita elegir el archivo de Word (abriendo el explorador con .Show) y combine la correspondencia con los registros de una consulta fija de la base de datos.

En algún foro hablan de "marcadores" (bookmarks), pero me parece entender que eso supone tener plantillas ya definidas para combinación, que es precisamente lo que quiero evitar, pues los usuarios no saben preparar "a mano" el archivo de Word para la combinación, y además va variando cada vez.

Yo quiero fabricar el Word cada vez para la combinación con VBA sustituyendo esa palabra de la primera línea por el campo de la consulta y que luego haga la combinación, todo automatizado. Si es que es posible hacerlo, claro.

No sé si con esto es más claro.
Muchas gracias por adelantado.
Arriba
buho Ver desplegable
Administrador
Administrador
Avatar
Abuelo FELIZ

Unido: 10/Abril/2004
Localización: Valladolid
Estado: Sin conexión
Puntos: 11317
Enlace directo a este mensaje Enviado: 15/Octubre/2017 a las 10:40
Hola, no sé si alguno de estos ejemplo te servirá. Para combinar correspondencia con Word hay varios caminos.

Yo cuando he tenido que hacer algo de ésto, predefino plantilla (Ya, he leido que eso no lo quieres hacer tú) a modo cartas "tipo" para que el usuario escoja una determinada (Ahora se me ocurre cartas de envío de saldos de clientes, de pedidos etc etc).
No sé...yo te dejo los ejemplos...y decides...


http://www.mvp-access.es/buho/tematico.asp?topico=word 
Expulsado de la cárcel por robar los barrotes
Arriba
JCB Ver desplegable
Nuevo
Nuevo


Unido: 15/Agosto/2017
Localización: España
Estado: Sin conexión
Puntos: 6
Enlace directo a este mensaje Enviado: 12/Noviembre/2017 a las 21:11
Ya lo he resuelto, añadiendo los campos de combinación después de redefinir cada vez el rango seleccionado.
Doy por cerrado este hilo.
Muchas gracias.Smile
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable