cerrar una carpeta desde access
Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84571
Fecha de impresión: 26/Marzo/2026 a las 17:27
Tema: cerrar una carpeta desde access
Publicado por: ffc2001ec
Asunto: cerrar una carpeta desde access
Fecha de publicación: 21/Junio/2019 a las 12:37
Buenas noches a todos Hay algún comando que se pueda usar en access para cerrar una carpeta o directorio, sólo quiero cerrar no eliminar
Muchas gracias
|
Respuestas:
Publicado por: Mihura
Fecha de publicación: 21/Junio/2019 a las 13:33
|
¿Cerrar una carpeta? ¿Y eso que es?
¿No será cerrar el explorador de windows?
------------- Jesús Mansilla Castells. Saludos desde Móstoles.
http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones http://www.tecsys.es" rel="nofollow - Tecsys.es
|
Publicado por: buho
Fecha de publicación: 21/Junio/2019 a las 13:41
|
Fijate que desde CMD sí se puede abrir una carpeta, por ejemplo: start "" "c:\TuCarpeta" Y si se puede desde CMD seguro que se puede hacer tambien desde VBA Pero a la inversa, la cosa se complica... Hasta donde yo sabía en su día, de forma general, el Explorador de Win no genera procesos independientes, por lo que no puede "matar" un proceso sin matar todas las ventanas, la barra de tareas etc
------------- El búho es un pajarraco
|
Publicado por: ffc2001ec
Fecha de publicación: 21/Junio/2019 a las 16:06
|
Paso a explicar mejor lo que busco. Tengo un proceso en access que culmina abriendo y mostrando el contenido de una carpeta, para ello utilizo Shell "explorer D:\Garibaldi2\pdf", vbMaximizedFocus
Si yo repito el proceso al final vuelve a ejecutarse la instrucción anterior y me queda en el explorador la carpeta activada dos veces; lo que quiero es que al repetir el procedimiento en caso de que la carpeta esté ya abierta se cierre para que al terminar sólo quede en el explorador 1 carpeta activa, sería algo así como hacer lo contrario de Shell "explorer D:\Garibaldi2\pdf", vbMaximizedFocus
muchas gracias
|
Publicado por: Emilio
Fecha de publicación: 21/Junio/2019 a las 16:33
|
Hola!
Paco, aunque yo también creí que no se podía, resulta que si se puede  mediante las API's Findwindow y la SendMessage
Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtrSub Prueba() FollowHyperlink "C:\Temp" Stop ' para verificar que se ha abierto la ventana SendMessage FindWindow(vbNullString, "C:\Temp"), 274, 61536, 0 End Sub |
------------- Saludos a todos desde Huelva
http://www.mvp-access.es/emilio/" rel="nofollow - http://www.mvp-access.es/emilio/
|
Publicado por: Mihura
Fecha de publicación: 21/Junio/2019 a las 17:06
¡ Hombre ! .... ¡¡¡ El niño perdio !!! 
Un saludo chiquitín ... 
------------- Jesús Mansilla Castells. Saludos desde Móstoles.
http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones http://www.tecsys.es" rel="nofollow - Tecsys.es
|
Publicado por: Mihura
Fecha de publicación: 21/Junio/2019 a las 17:12
|
Por cierto, tal cual lo has puesto a mi no me funciona (Access 2.010 + W10 prof).
El nombre de la ventana a cerrar tiene que ser Temp a secas.
SendMessage FindWindow(vbNullString, "Temp"), 274, 61536, 0
------------- Jesús Mansilla Castells. Saludos desde Móstoles.
http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones http://www.tecsys.es" rel="nofollow - Tecsys.es
|
Publicado por: Emilio
Fecha de publicación: 21/Junio/2019 a las 18:10
|
Windows 10 1903, así tal cual me funciona.
El código mas mejor
#If Win64 Or VBA7 Then Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As Long #Else Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr #End IfPublic Const SC_CLOSE As Long = 61536, _ WM_SYSCOMMAND As Long = 274 Sub Prueba() FollowHyperlink "C:\Temp" Stop ' para verificar que se ha abierto la ventana SendMessage FindWindow(vbNullString, "C:\Temp"), WM_SYSCOMMAND, SC_CLOSE, 0 End Sub |
------------- Saludos a todos desde Huelva
http://www.mvp-access.es/emilio/" rel="nofollow - http://www.mvp-access.es/emilio/
|
Publicado por: ffc2001ec
Fecha de publicación: 21/Junio/2019 a las 20:58
|
Muchas gracias
No soy experto en el vba para Access, por favor dónde debo colocar el código?
|
Publicado por: ffc2001ec
Fecha de publicación: 22/Junio/2019 a las 03:14
|
hola a todos, encontré este código y en principio me está funcionando:
myfolder = "D:\Garibaldi2\pdf" Set sh = CreateObject("shell.application") For Each w In sh.Windows If w.Document.folder.self.Path = myfolder Then w.Quit Next
|
Publicado por: Emilio
Fecha de publicación: 22/Junio/2019 a las 05:59
|
Respondiendo a tu pregunta de mi código la línea SendMessage FindWindow(vbNullString, "C:\Temp"), WM_SYSCOMMAND, SC_CLOSE, 0
reemplazaría a tu código, mientras que la declaración de funciones API y constantes habría de ir en la cabecera de un módulo estándar.
------------- Saludos a todos desde Huelva
http://www.mvp-access.es/emilio/" rel="nofollow - http://www.mvp-access.es/emilio/
|
|