Informe con texto justificado en Access 2003
Necesito que un informe en Access 2003 muestre una cadena de campos concatenados con un formateo de texto justificado.
La opción de texto "distribuir" no funciona bien con el último párrafo, y he encontrado una bd de Lebans (http://www.lebans.com/justidirect.htm), pero soy incapaz de trasladar ese bd ejemplo a la mía.
¿Alguien me podría decir cómo funciona? Me refiero una explicación para un novato en Access, ya que me limito a copiar el informe pero no encuentro ninguna macro o similar que haga que funcione; decir que no he encontrado ayuda en la propia página web.
1 respuesta
lo que tienes que importar a tu BD es el módulo de clase "clsJustifyText" y luego, en tu informe, programar los mismos eventos que están programados en los formularios del ejemplo de Lebans: Private Sub Detail_Print, Private Sub Report_Close, Private Sub Report_Open y Private Sub Report_Page.
Si sólo tienes un campo que quieres justificar, sólo tendrás que declarar una variable (Dim Justi1 As New clsJustifyText) y fíjate en poner el nombre de tu campo en el código (Call Justi1. FRecordSection(Me, TuNombre, PrintCount)
He copiado el módulo de clase a mi bd y he incluido lo siguiente en mi informe (en modo código, no sé si está bien así):
Option Compare Database
Option Explicit
Dim Justi1 As New clsJustifyText
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
Call Justi1.fRecordSection(Me, Me.TextoActa, PrintCount)
End Sub
Private Sub Report_Close()
Set Justi1 = Nothing
End Sub
Private Sub Report_Open(Cancel As Integer)
DoCmd.Maximize
End Sub
Private Sub Report_Page()
Dim myBool As Boolean
myBool = Justi1.fJustiDirect(Me)
Debug.Print "SF Page event"
End Sub
Donde TextoActa es el campo (que es concatenación de varios) que quiero justifica.
Sin embargo cuando abro el informe me da el siguiente error: "Se ha producido el error 75 en tiempo de ejecución: Error de acceso a la ruta o el archivo. Finalizar o Depurar", si pincho en Depurar me resalta la línea myBool = Justi1.fJustiDirect(Me).
No sé exactamente dónde está el error, pues no me paré a analizar el módulo de clase en detalle, pero probé a importarlo a una de mis BDs y funciona sin problemas.
No sé cómo tienes montado tu informe, ni en qué lugar tienes el cuadro que quieres justificar, pero si te fijas, en al BD de Lebans hay 4 informes, los dos últimos tienen los códigos que tienes que usar si tu cuadro está ubicado en un encabezado o pie de grupo...
Igual por ahí viene el error que te da...
Míralo y me dices.
Buenos días:
El texto que quiero justificar está en el detalle del informe (ni en encabezado ni en el pie); este campo es una concatenación de varios campos (no sé si ese puede ser el problema, ya que no es un único campo memo).
Si no es mucha molestia, podría pasarte la bd que estoy desarrollando para que pudieses chequearla más en profundidad.
Un saludo,
Hola de nuevo:
Creo que el problema es más complicado, ya que cuando intento ahora revisar la bd de Evans también me da ese error.
El origen es que al abrir la bd de Lebans me dijo que esa bd se creó con una versión anterior de MO Access y que debía convertirla.
El siguiente paso que hice fue exportarla a Access 2003 y a continuación seguí tus indicaciones, Sveinbjorn, pero, como decía, ahora al abrirla e intentar ejecutar el primer informe me da el mismo error que he reportado anteriormente...
Sveinbjorn, ¿podrías pasarme la bd ejemplo en la que has probado este módulo, pero en versión 2003? no se me ocurre otra cosa...
Gracias y un saludo,
Me he bajado una BD de una pregunta anterior tuya (supongo que será la misma o similar), he insertado el módulo y copiado el código a los eventos correspondientes (los que te indicaba en el mensaje anterior) y funciona sin darme ningún error...
Lo que sí, hacerte un par de puntualizaciones:
1º/ El campo en este informe no se llama TextoActa, sino CRegistro.
2º/ Tienes que ponerle el color de la letra en blanco (según explica Lebans en el comentario del módulo)
3º/ Este campo tienes que ampliarlo a lo largo, para que te coja todo el texto (como lo tenías no lo hacía)
4º/ Por probar, he justificado también el campo Texto55, el que va encima del orden del día, y en este caso, no hace falta cambiarle el color de la letra (no sé muy bien por qué motivo...)
Gracias por la rapidez en la respuesta, Sveinbjorn, me acabo de descargar tu ejemplo - que efectivamente es mi bd original - y me da el mismo error.
Sin entender mucho del tema, me temo que tenga que ver con el software instalado; voy a probar en otro pc con Access 2003 a ver si puedo abrir tu bd y, por tanto, seguir tus indicaciones para conseguir dar con la solución.
De momento, si te parece, no cierro la pregunta por si hubiese algún "fleco" que comentar.
Muchas gracias y un saludo,
A mi no me da ningún error (tengo Access 2007) ni el ejemplo ni la BD de Lebans original ni esa misma "actualizada".
Además, acabo de probarlo en otro PC con access 2003 y también funciona perfectamente...
Ya me dirás.
Ayer por la noche, probé la BD que te mandé en un portátil con access 2010 y zas! El error 75 que comentabas que te salía a ti.
No sé a que se debe ese error, pero busqué un par de alternativas:
https://sites.google.com/site/jjjt1973/system/app/pages/search?scope=search-site&q=justificar
http://www.mvp-access.es/emilio/Access/Descargas.asp -> Ejemplo 150
http://www.mvp-access.es/buho/ficheros/justificartextocampomemo.txt
Los dos últimos sólo funcionan con fuentes monoespaciadas, como la Courier new.
El primero, para que funcione, tienes que ocultar el campo que depende de la tabla/consulta y añadir un cuadro de texto independiente que es el que va a mostrar el texto justificado. Te mando la BD con este sistema a ver si te sirve (ojo que le cambié los nombres a los cuadros):
Sveinbjorn, muchas gracias por el interés y dedicación, ya que has chequeado en un tercer pc este problema (yo no fui capaz tampoco de evitar ese error en otro pc).
Debido a mis cortos conocimientos de Access, he utilizado tu bd pero no consigo ver el resultado que traslado a la mía, y me explico:
1- Exporto el módulo Mdl_Justificar a mi db.
2- Copio el cuadro de texto independiente de tu bd a la mía; aquí no soy capaz de ver qué lo enlaza con el campo del texto de quiero justificar.
3- El campo a justificar lo pongo no visible, no autoextensible y no autocomprimible.
4- Como resultado de lo anterior, al solicitar el informe me sale vacío el cuadro a justificar.
Estoy seguro que el problema estriba en que no enlazo el cuadro de texto independiente con el campo a justificar pero soy incapaz de localizar cómo hacerlo.
Gracias y un saludo,
Creo que lo estás haciendo mal. Si te fijas, en el informe que te mandé (te pongo una imagen más abajo), en la sección detalle hay 3 cuadros de texto:
Uno que se llama CPunto (en azul en la imagen) , que es el que muestra el campo PuntoActa, y que en la vista diseño pone: [PuntoActa]
Otro que se llama TextoActa (en rojo), que es el que muestra el campo TextoActa, y que en la vista diseño pone:TextoActa . Este es el que es invisible.
Y otro, que se llama txtTextoActa (en verde), que es el que va a mostrar el texto justificado, y que en la vista diseño es el más grande y pone: Independiente.
El código que hace que el texto se muestre justificado es este:
Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer)
txtTextoActa = Justifica(TextoActa, txtTextoActa, Me) 'Aquí llamas la función
End Sub
Que lo tienes que poner en el evento al dar formato de la sección detalle.
El código, lo que hace es asignar al cuadro txtTextoActa (que es independiente de la consulta) el texto justificado del campo TextoActa. Es decir, el primer valor de la función Justifica es el campo que contiene el texto, el segundo es el cuadro de texto independiente donde se va a mostrar el texto justificado, y el tercero es el informe que contiene el cuadro (que se lo indicas como Me, al ser el propio informe)
- Compartir respuesta