Imprimir página | Cerrar ventana

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

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84955
Fecha de impresión: 27/Marzo/2026 a las 06:03


Tema: Código no funciona en formato .accdb( superior a 2
Publicado por: maserrano
Asunto: Código no funciona en formato .accdb( superior a 2
Fecha de publicación: 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.




Respuestas:
Publicado por: Maverick2019
Fecha de publicación: 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,



Publicado por: maserrano
Fecha de publicación: 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.


Publicado por: maserrano
Fecha de publicación: 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.



Imprimir página | Cerrar ventana