La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1479 - CONFIGURACION DE PAGINA
Autor:  Juan Alava Salillas
En Access 2000 cuando meto los parametros de la pagina en un informe, en concreto los margenes y la grabo por primera vez todo va correcto pero cuando luego entro otra ves para modifcar alguna campo me borra los parametros. Hay alguna forma de que no me ocurra esto.

  Respuesta:  Carmen Benítez
Yo puede resolver ese problema con el código que te paso a continuación, pero solo lo reconoce en un MDB, no en un MDE, por lo tanto para mi sigue siendo un problema.
Es conveniente que este código lo pongas en un módulo y desde el lugar donde quieras llamar al reporte envias el nombre del mismo en el procedimiento del modulo:
Ej: ImprimirAjustandoMargenes ("aqui_va_el_nombre_del_informe")

Código del Módulo:
Option Explicit

Type CadenaPrtMip
strConfiguracion As String * 28
End Type
' la estructura TipoPrtMIP se pasa a la cadena
' strConfiguracion, y ésta a la propiedad PrtMIP
' de un informe para configurar sus propiedades
' mediante VBA en modo diseño.
' PrtMIP es de sólo lectura en tiempo de ejecución

Type TipoPrtMIP
MargenIzquierdo As Long
MargenSuperior As Long
MargenDerecho As Long
MargenInferior As Long
SoloDatos As Long
Ancho As Long
Alto As Long
TamañoPredeterminado As Long
Columnas As Long
EspacioColumna As Long
EspacioFila As Long
DiseñoElemento As Long
FastPrinting As Long
Datasheet As Long
End Type

Public Sub ImprimirAjustandoMargenes( _
ByVal Informe As String, _
Optional ByVal MargenIzq As Single = 2.01, _
Optional ByVal MargenDch As Single = 1.51, _
Optional ByVal MargenSup As Single = 2.01, _
Optional ByVal MargenInf As Single = 1.51)
' Este procedimiento abre un informe
' le aplica los márgenes, lo imprime y lo cierra
' para aplicarle los márgenes usa la propiedad
' (de sólo lectura en ejecución) prtMip del informe
' Primera versión 19/10/2002
' Eduardo Olaz [email protected]
' Los márgenes están en centímetros
' strConfiguracion será la cadena de 28 byts que
' pasaremos a la propiedad PrtMip del informe
' conTwipsCentimetro Coeficiente de conversión
' de Centímetros a Twips

' Aquí deberías poner una rutina de errores
On Error GoTo HayError
Const conTwipsCentimetro As Long = 567
' Los márgenes se pasan en Twips
Dim PrtMipString As CadenaPrtMip
Dim TPrtMip As TipoPrtMIP
Dim rpt As Report
DoCmd.OpenReport Informe, acViewDesign
Set rpt = Reports(Informe)
' Ya que tenemos una cadena en el PrtMip
' del informe gravado la usamos como base
PrtMipString.strConfiguracion = rpt.PrtMip
LSet TPrtMip = PrtMipString
With TPrtMip
.MargenIzquierdo = MargenIzq * conTwipsCentimetro
.MargenSuperior = MargenSup * conTwipsCentimetro
.MargenDerecho = MargenDch * conTwipsCentimetro
.MargenInferior = MargenInf * conTwipsCentimetro
End With
If rpt.Name = "inf_benxGto" Then
rpt.Orientation = 1
End If
LSet PrtMipString = TPrtMip ' Actualiza la propiedad.
rpt.PrtMip = PrtMipString.strConfiguracion
' Abrimos el informe para la vista previa, en caso de querer imprimirlo
' en vez de escribir acViewPreview escribir acViewNormal
'DoCmd.OpenReport Informe, acViewPreview
' Cerramos el informe y lo grabamos
' DoCmd.Close acReport, Informe, acSaveYes
Set rpt = Nothing
Salir:
Exit Sub

HayError:
MsgBox "Se ha producido el Error Nº " & Err.Number _
& vbCrLf _
& Err.Description _
& vbCrLf _
& "Al tratar de imprimir el informe: " _
& Informe, _
vbCritical + vbOKOnly, _
"Procedimiento ImprimirAjustandoMargenes"
Set rpt = Nothing
Resume Salir
End Sub

Si tenes alguna respuesta con respecto al MDE por favor avisame.

  Respuesta:  Berni Rodríguez
Esta es la respuesta que he conseguido a través de una serie de contactos. A mí también me volvia loco que los informes cada 2 por 3 se desconfigurasen:

Es un BUG documentado de Microsoft Access 2000. En
algunas situaciones, cuando se tiene marcada la opcion de ´Realizar Autocorreccion de Nombres´ (Menu Herramientas/Opciones/Pestana de General), al tratar de realizar la opcion de cambiar la configuracion esta no queda permanente para el informe.

Esto se soluciona en la Service Release 1 de Microsoft Office 2000.

De todas maneras desmarca la autocorreccíon de nombre si aun no tienes el Service Release 1

  Respuesta:  Tony Montes de Oca
Fija los parámetros desde el código en VB, en un evento anterior a la ejecución de la impresión. Por ejemplo BeforePrint, o Load. Seguro que los declaras de forma interactiva desde las cajas de diálogo del Access. No sé con el 2000, pero con ´97 funciona.