** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Transpaso de datos de consulta a plantilla DOT
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoTranspaso de datos de consulta a plantilla DOT

 Responder Responder
Autor
Mensaje
Gorgo Ver desplegable
Habitual
Habitual
Avatar

Unido: 01/Febrero/2006
Localización: España
Estado: Sin conexión
Puntos: 197
Enlace directo a este mensaje Tema: Transpaso de datos de consulta a plantilla DOT
    Enviado: 23/Junio/2023 a las 18:50
Muy buenas al foro y como siempre pido vuestra colaboracion despues de haberme vuelto loco durante 15 dias y no encontrar una solucion. Al final he optado por pedir ayuda. Vereis....
He cambiado por defunción mi PC I3 con W10 a otro I5 con W11 ambos en 64.
Desde hace años llevo utilizando un codigo sacado de este foro y que me ha resuelto la papeleta laboral agilizando mi trabajo  desde hace mucho tiempo. Tan sencillo como traspasar bastantes registros a una tabla de una plantilla WORD mediante un filto. Es decir mediante la pulsacion de un boton, traspasa aquellos registros de reconocimientos medicos que se han realizado en una clinica concreta. Y asi con otros 10 documentos en la misma linea y que al utilizar el mismo codigo...
La pequeña aplicacion rueda bajo Access 2002 y combina una plantilla 2010 con la info ya filtrada. Compilo y no da errores de REFERENCIAS o algo que indique el por que de no aparecer el documento rellenado aunque en el ADMINISTRADOR DE TAREAS hay un PROCESO de WORD ejecutandose.
Mis conocimientos en VBA es para andar por casa por lo que ruego me ayudeis en la medida que podais ya que en estos momentos las tareas las estoy haciendo a pedal y es... mientras que con la aplicacion era apretar el botoncito... hazte cargo. Agradezco de antemano vuestra ayuda ya que es un tema para mi bastante importante. Gracias fenomenos.

El Codigo del boton:

Private Sub Junta_Click()
If Not IsNull(IdClinica) Or Me!IdClinica <> "" Then
    Dim Informe As New ClaseInformeWord
    Dim filtro As String
    filtro = "IdClinica=" & Me.IdClinica
    Call Informe.Abrir("\Documentacion\Certificados\Empresas Nuevas Junta.dot")
    Call Informe.Ejecutar("Consulta_Prevencion_Principal", filtro)
    Call Informe.EjecutarTablaDetalles(2, "Consulta_Acuerdo_Principal_Anexo_Nuevas", filtro)
    Call Informe.Cerrar
    Set Informe = Nothing
Else
    DoCmd.OpenForm "MensajeError", , , , , , "El Registro está en Blanco"
  End If
End Sub

El codigo del MODULO:

Option Compare Database
Option Explicit
Private app_word As Word.Application
Private documento_word As Word.Document
Public Function Abrir(ByVal plantilla_word As String)
    Dim ruta_actual As String
    Set app_word = New Word.Application
    app_word.Visible = False
    If plantilla_word = "" Then
        Set documento_word = app_word.Documents.Add()
    Else
        ruta_actual = left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\"))
        Set documento_word = app_word.Documents.Add(ruta_actual & plantilla_word)
    End If
End Function
Public Function Cerrar()
On Error Resume Next
    app_word.Visible = True
    Set app_word = Nothing
    Set documento_word = Nothing
End Function
Public Function Ejecutar( _
  ByVal consulta As String, _
  Optional ByVal filtro As String = "" _
) As Boolean
On Error GoTo Errores
    Call SysCmd(acSysCmdInitMeter, "Exportando a Word: " & consulta, 400)
    DoCmd.Hourglass True

    Dim rs As DAO.Recordset
    Dim field As DAO.field
   
    If filtro <> "" Then consulta = "SELECT * FROM " & consulta & " WHERE " & filtro
    Set rs = CurrentDb.OpenRecordset(consulta, dbOpenForwardOnly)
    
    If rs.BOF And rs.EOF Then
        'Nada
    Else
        For Each field In rs.Fields
            With app_word.Selection.Find
                .ClearFormatting
                .Text = "[" & UCase(field.Name) & "]"
                With .Replacement
                    .ClearFormatting
                    .Text = rs(field.Name) & ""
                End With
                Call .Execute(Replace:=Word.WdReplace.wdReplaceAll)
            End With
        Next
    End If
    Ejecutar = True
Salida:
    Call SysCmd(acSysCmdRemoveMeter)
    DoCmd.Hourglass False
    Exit Function
Errores:
    MsgBox Err.Description, vbCritical, "Ejecutar"
    Resume Salida
End Function
Public Function EjecutarTablaDetalles( _
  ByVal num_tabla As Integer, _
  ByVal consulta As String, _
  Optional ByVal filtro As String = "" _
) As Boolean
On Error GoTo Errores
    Call SysCmd(acSysCmdInitMeter, "Exportando a Word: " & consulta, 100)
    DoCmd.Hourglass True

    Dim rs As DAO.Recordset
    Dim field As DAO.field
    Dim tabla As Word.Table
    Dim ultima_fila As Word.Row, nueva_fila As Word.Row
    Dim celda As Word.Cell
    Dim campo As String, Valor As String
        
    If filtro <> "" Then consulta = "SELECT * FROM " & consulta & " WHERE " & filtro
    Set rs = CurrentDb.OpenRecordset(consulta, dbOpenForwardOnly)
    Set tabla = documento_word.Tables(num_tabla)
    
    If rs.BOF And rs.EOF Then
        'Nada
    Else
        Do Until rs.EOF
            Set ultima_fila = tabla.Rows(tabla.Rows.Count)
            Set nueva_fila = tabla.Rows.Add
            For Each celda In ultima_fila.Cells
                'Duplicar la última fila en la nueva
                campo = celda.Range.Text
                campo = left(campo, Len(campo) - 2) 'Eliminar vbCrLf del final
                nueva_fila.Cells(celda.ColumnIndex).Range.Text = campo
                
                'Poner los valores
                For Each field In rs.Fields
                         Valor = rs(field.Name) & ""
                     campo = Replace(campo, "[" & field.Name & "]", Valor)
                Next
                celda.Range.Text = campo
            Next
                   rs.MoveNext
        Loop
    End If
    
    'Borrar la última fila
    tabla.Rows(tabla.Rows.Count).Delete
    
    EjecutarTablaDetalles = True
Salida:
    Call SysCmd(acSysCmdRemoveMeter)
    DoCmd.Hourglass False
    Exit Function
Errores:
    MsgBox Err.Description, vbCritical, "EjecutarTablaDetalles"
    Resume Salida
End Function

En cualquier lugar los hay, la cosa es dar con ellos.
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3535
Enlace directo a este mensaje Enviado: 23/Junio/2023 a las 19:17
Hola.
Sí he entendido bien, Hablas de un programa 2002, una plantilla word 2010 y una nueva máquina nueva con win 11 de 64 bits.
Lo que no tengo claro es que versión de office tienes instalada en la nueva máquina, la 2010 o una posterior.
Ya comentas.
Un saludo a todos
Arriba
Gorgo Ver desplegable
Habitual
Habitual
Avatar

Unido: 01/Febrero/2006
Localización: España
Estado: Sin conexión
Puntos: 197
Enlace directo a este mensaje Enviado: 23/Junio/2023 a las 19:24
Gracias... pues realmente tengo OFFICE 2010 y SOLO ACCESS 2002 y ha funcionado perfectamente en el I3 bajo W10 sin necesidad de convertirla a versiones superiores.

Gracias por responder
En cualquier lugar los hay, la cosa es dar con ellos.
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3535
Enlace directo a este mensaje Enviado: 23/Junio/2023 a las 19:32
hola.
A mí me resulta imposible hacer pruebas ya que tengo el 2019.
Prueba de hacer visible el word:
La línea
 app_word.Visible = False
cambiala a 
app_word.Visible = true
De esa manera "verás" el word y podrás cerrarlo para evitar que se quede funcionando sin verlo y poder "ver" lo que hace o no.
Ya comentas.
Un saludo a todos
Arriba
Gorgo Ver desplegable
Habitual
Habitual
Avatar

Unido: 01/Febrero/2006
Localización: España
Estado: Sin conexión
Puntos: 197
Enlace directo a este mensaje Enviado: 23/Junio/2023 a las 21:34
He creado un formulario fuera de la aplicacion y al pulsar el boton aparece los sigueontes errores.

A la base de datos o al proyecto de microsoft access le falta una referencia al archivo MSWORD.OLB version 8.3 o la referencia es erronea

He ido a REFERENCIAS y no se cual me hace falta de la ya activadas

- visual basic for aplications
- microsoft access 11.0 object library
- microsoft DAO 3.6 object library
- microsoft office library object library
- microsotf word 14.0 object library

En el MODULO y al compilar

Private app_word As Word.Application (error de compilacion. no se puede encontrar el proyecto o biblioteca)

Las referencias de siempre y funcionaba. Siempre que me iba pidiendo librerias conforme la aplicacion crecia, las activaba


Gracias de antemano





Editado por Gorgo - 23/Junio/2023 a las 22:22
En cualquier lugar los hay, la cosa es dar con ellos.
Arriba
Gorgo Ver desplegable
Habitual
Habitual
Avatar

Unido: 01/Febrero/2006
Localización: España
Estado: Sin conexión
Puntos: 197
Enlace directo a este mensaje Enviado: 27/Junio/2023 a las 15:05
Buenas, al final y despues de invertir tiempo el problema no es el codigo si no un problema de instalacion ya que despues de haberlo problado en otros tipos de ordenadores y windows, funciona perfectamente fallando unicamente en mi nuevo PC.

Agradecido por la ayuda aportada y podemos cerrar el hilo
En cualquier lugar los hay, la cosa es dar con ellos.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable