2015-05-11

Ocultar Access al usuario salvo el formulario

Title

Problema

Deseamos mostrar solamente un formulario, ocultando totalmente Access al usuario.

Solución

Utilizaremos como ejemplo la base de datos Neptuno.

Elegimos un formulario que deseamos mostrar —Panel de control principal— y crearemos un nuevo formulario —Formulario1— que estableceremos como formulario predeterminado al abrir la base de datos. Después es necesario añadir varias líneas de código en ambos formularios.

  1. En el Formulario1, Clic con el botón secundario en el cuadrado situado en la esquina superior izquierda del formulario y seleccionamos: Generador de código.
  2. O bien a través de la hoja de propiedades del formulario.

  3. Se abrirá el editor de Visual Basic e introduciremos el siguiente código:
  4. Option Explicit
    
     Const SW_HIDE = 0
     Const SW_NORMAL = 1
     Const SW_MINIMIZED = 2
     Const SW_MAXIMIZED = 3
    
    Private Declare Function ShowWindow Lib "user32" _
      (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    
    Private Sub Form_Open(Cancel As Integer)
       Call ShowWindow(hWndAccessApp, SW_HIDE)
       DoCmd.OpenForm "Panel de control principal", windowmode:=acDialog
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    Dim lngRetCode As Long
       lngRetCode = ShowWindow(hWndAccessApp, SW_MAXIMIZED)
    End Sub
    
    El código anterior al abrir el formulario predeterminado —Formulario1— esconde la ventana de Access y abre el formulario que deseamos mostrar: Panel de control principal. Al descargar restablecemos la ventana.

  5. En el formulario que deseamos mostrar en nuestro ejemplo —Panel de control principal— repetimos los pasos anteriores y copiamos el siguiente código.
  6. Private Sub Form_Unload(Cancel As Integer)
       Application.Quit
    End Sub
    
    Con la línea anterior al cerrar el formulario que mostramos —Panel de control principal también cerramos el Access evitando que se siga ejecutando en un segundo plano.

  7. Guardamos los cambios en el formulario y cerramos el Access
Al volver a abrir este fichero de Access mostrará solamente el formulario Panel de control principal, quedando oculta tanto la cinta de opciones como el panel de exploración. Si deseamos tener acceso normal a este fichero, mantenemos presionada la tecla Mayús mientras abrimos el mismo.

Referencias

15 comentarios:

  1. Buenosdias
    He intentado varias veces con el código pero no resulta.
    Hay otra forma de solo mostrar el formulario principal.
    Gracias

    ResponderEliminar
    Respuestas
    1. Buenos días, acabo de seguir todos los pasos y funciona. No se trata de copiar y pegar el código, sino de ir punto por punto: asignar el formulario predeterminado correcto al abrir la base de datos, el nombre del formulario que queremos abrir en el paso dos tras DoCmd.OpenForm etc. También te podría dar error por otros motivos, por ejemplo, tal vez si usas una versión de 64-Bit. Si tienes cualquier duda, busca información en foros especificando en detalle el problema. Saludos.

      Eliminar
  2. Hola,
    He probado tu método, en Access 2016, y funciona perfectamente. Solo tengo un problema: después de abrir el formulario principal (el Panel de control principal en tu ejemplo), llamo a un formulario (por ejemplo Clientes) con la siguiente instrucción:

    DoCmd.OpenForm "Clientes", acNormal, , "NCliente=" & NCliente.Value, acDialog

    El formulario se abre correctamente por encima del principal. En este formulario, un botón intenta abrir un informe con la siguiente instrucción:

    DoCmd.OpenReport "Clientes", acViewPreview, , "NCliente=" & NCliente.Value, acDialog

    En este punto, el informe no se visualiza (he probado también con el parámetro acViewReport) y Access se queda colgado. La única manera de cerrarlo es mediante el Administrador de tareas de Windows, finalizando el proceso. ¿Sabes porqué pasa esto?
    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola Raúl, plantea tu duda en un foro de resolución de problemas de Access. Saludos.

      Eliminar
    2. Hola otra vez,
      Sigo con el mismo problema. ¿Alguna idea de como solucionarlo?
      Gracias.

      Eliminar
    3. Hola. Lo que pasa es que el informe se abre en la app por lo tanto queda oculto. Lo qie tienes que hacer es entrar a las propiedades y poner en la solapa Otras-> Emergente -> Si

      Eliminar
  3. HOLA, ¿PODRÍAS DAR LA SOLUCIÓN PARA 64 BITS?
    MUCHAS GRACIAS DE ANTEMANO

    ResponderEliminar
    Respuestas
    1. Private Declare PtrSafe Function ShowWindow Lib "user32" _
      (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

      Eliminar
    2. Muchas gracias. Saludos.

      Eliminar
  4. NOMEFUNCIONA EN ACCESS 2010

    ResponderEliminar
    Respuestas
    1. El motivo más probable es que lo estás implementando mal. Plantea tu duda con detalle en un foro.

      Eliminar
  5. Funciona perfecto. Pero estableciendo el valor de SW_HIDE a 0 también haces que no se muestren los informes y access se cuelgue.

    ResponderEliminar
  6. me da error "ambiguos name detected:from open

    ResponderEliminar
    Respuestas
    1. Busca qué significa dicho error y trata de solucionarlo.

      Eliminar

Nube de datos