|
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.
|