** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Código no funciona en formato .accdb( superior a 2
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCódigo no funciona en formato .accdb( superior a 2

 Responder Responder
Autor
Mensaje
maserrano Ver desplegable
Colaborador
Colaborador


Unido: 02/Abril/2014
Localización: España
Estado: Sin conexión
Puntos: 690
Enlace directo a este mensaje Tema: Código no funciona en formato .accdb( superior a 2
    Enviado: 20/Enero/2020 a las 13:47
Buenas tardes.
Tengo una aplicación en access 2003 (.mdb) en la que uso un código que realiza lo siguiente en pocas palabras:
-Sobre un formulario toma valores
-Estos valores los reemplaza de una tabla
-Me abre una aplicación de libreofficce (plantilla de writter) y me hace las sustituciones.

Con un formato superior de acces  (.accdb), me abre la plantilla de writer pero no me realiza las sustituciones y no tengo ni idea de porqué no lo hace.

Adjunto los datos básicos:

TABLA:

CodeToReplace ReplaceWithFieldName numerador
{Datos1} Forms!Registro!campo1 1

CodeToReplace (texto largo)
ReplaceWithFieldName (texto largo)
numerador (Número)

FORMULARIO:

Sobre un botón, en el evento al hacer clic, coloco el siguiente código:

Private Sub DatosRegistro_Click()
Dim dbLocal As Database
   Dim snpReplaceCodes As Recordset
   Dim strCurrAppDir As String
   Dim strFinalDoc As String
   Dim varReplaceWith As Variant

   Dim mibusqueda As Object
   Dim oservicio As Object
   Dim Escritorio As Object
   Dim document As Object
  
    On Error GoTo Error_DatosRegistro_Click
    Set dbLocal = CurrentDb()
    strCurrAppDir = Left$(dbLocal.Name, InStrRev(dbLocal.Name, "\"))
              
   strFinalDoc = strCurrAppDir & "Plantillas/Datos.ott"
   On Error GoTo Error_DatosRegistro_Click
   strFinalDoc = Replace(strFinalDoc, "\", "/")
   strFinalDoc = "file:///" + strFinalDoc
      
   Dim args(1) As Object
    Set oservicio = CreateObject("com.sun.star.ServiceManager")
    Set Escritorio = oservicio.createInstance("com.sun.star.frame.Desktop")
    Set args(0) = oservicio.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    args(0).Name = "Hidden"
    args(0).Value = True
    Set document = Escritorio.loadComponentFromURL(strFinalDoc, "_blank", 0, args())
    Call document.getCurrentController.getFrame.getContainerWindow.setVisible(True)
    Call document.getCurrentController.getFrame.getComponentWindow.setVisible(True)
    Set mibusqueda = document.createReplaceDescriptor

'abro ahora la tabla de las sustituciones

   Set snpReplaceCodes = dbLocal.OpenRecordset("TRDatos", _
         dbOpenSnapshot)

   Do While Not snpReplaceCodes.EOF


      varReplaceWith = Eval(snpReplaceCodes!ReplaceWithFieldName)
      varReplaceWith = IIf(IsNull(varReplaceWith), " ", CStr(varReplaceWith))

    mibusqueda.setsearchstring (snpReplaceCodes!CodeToReplace)
    mibusqueda.setreplacestring (varReplaceWith)
    Call document.replaceall(mibusqueda)


       snpReplaceCodes.MoveNext

   Loop
'
  snpReplaceCodes.Close
   Exit Sub
   
Error_DatosRegistro_Click:

   beep
   ' MsgBox "Ha ocurrido el error:" & vbCrLf & _
   ' Err.Description, vbCritical, "OLE Error!"
   Exit Sub
End Sub

PLANTILLA LibreOffice Writer
Es una plantilla de extensión .ott en la que el campo a sustituir del formulario va entre llaves:
{Dato1}

TRDatos es la tabla de sustituciones, Registro es el formulario y Datos.ott es la plantilla de Writer (en una carpeta llamada Plantillas).

Supongo (por suponer) que debe ser una adaptación entre versiones o algún tipo de librería... pero no tengo ni idea. Si alguien ve algo  que me pueda dar alguna luz lo agradecería.
Gracias de antemano.



Editado por maserrano - 20/Enero/2020 a las 13:52
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 20/Enero/2020 a las 14:31
Hola
Sí ejecutas paso a paso ¿te da algún error? ¿pasa por todos los sitios?
Prueba a comentar las lineas "on error" y a ejecutar paso a paso.

Salu2,

Arriba
maserrano Ver desplegable
Colaborador
Colaborador


Unido: 02/Abril/2014
Localización: España
Estado: Sin conexión
Puntos: 690
Enlace directo a este mensaje Enviado: 20/Enero/2020 a las 14:40
Ok. Gracias Maverick.
Lo haré. 
De momento me estoy centrando en las Librerías. Sé que debe ser algún registro... pero no doy con la tecla.
Arriba
maserrano Ver desplegable
Colaborador
Colaborador


Unido: 02/Abril/2014
Localización: España
Estado: Sin conexión
Puntos: 690
Enlace directo a este mensaje Enviado: 20/Enero/2020 a las 16:52
Hola.
Parece solucionado.
Como imaginaba, era una referencia que no estaba registrada o me estaba dando conflicto o qué se yo...
Se trataba del Microsoft Office 16.0 Object Library
Sólo la he vuelto a registrar y ya hace las sustituciones.
Me ayudaron a realizar la conversión de office a libreoffice en su momento en un foro de México y se me escapan detalles que no logro entender.
Lo importante es que va,... de momento.
Gracias.
Se puede cerrar el hilo por mi parte.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable