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.
- 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. O bien a través de la hoja de propiedades del formulario.
- Se abrirá el editor de Visual Basic e introduciremos el siguiente código:
- En el formulario que deseamos mostrar en nuestro ejemplo —Panel de control principal— repetimos los pasos anteriores y copiamos el siguiente código.
- Guardamos los cambios en el formulario y cerramos el Access
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 SubEl 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.
Private Sub Form_Unload(Cancel As Integer) Application.Quit End SubCon 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.
Referencias
Buenosdias
ResponderEliminarHe intentado varias veces con el código pero no resulta.
Hay otra forma de solo mostrar el formulario principal.
Gracias
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.
EliminarHola,
ResponderEliminarHe 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.
Hola Raúl, plantea tu duda en un foro de resolución de problemas de Access. Saludos.
EliminarHola otra vez,
EliminarSigo con el mismo problema. ¿Alguna idea de como solucionarlo?
Gracias.
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
EliminarHOLA, ¿PODRÍAS DAR LA SOLUCIÓN PARA 64 BITS?
ResponderEliminarMUCHAS GRACIAS DE ANTEMANO
Private Declare PtrSafe Function ShowWindow Lib "user32" _
Eliminar(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Muchas gracias. Saludos.
EliminarNOMEFUNCIONA EN ACCESS 2010
ResponderEliminarEl motivo más probable es que lo estás implementando mal. Plantea tu duda con detalle en un foro.
EliminarFunciona perfecto. Pero estableciendo el valor de SW_HIDE a 0 también haces que no se muestren los informes y access se cuelgue.
ResponderEliminarFunciona en office 2016?
ResponderEliminarme da error "ambiguos name detected:from open
ResponderEliminarBusca qué significa dicho error y trata de solucionarlo.
Eliminar