** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - cerrar una carpeta desde access
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradocerrar una carpeta desde access

 Responder Responder
Autor
Mensaje
ffc2001ec Ver desplegable
Nuevo
Nuevo


Unido: 18/Julio/2017
Localización: Ecuador
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Tema: cerrar una carpeta desde access
    Enviado: 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
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
buho Ver desplegable
Administrador
Administrador
Avatar
Nada en la palabra

Unido: 10/Abril/2004
Localización: Valladolid
Estado: Sin conexión
Puntos: 11330
Enlace directo a este mensaje Enviado: 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
Arriba
ffc2001ec Ver desplegable
Nuevo
Nuevo


Unido: 18/Julio/2017
Localización: Ecuador
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 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


Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18836
Enlace directo a este mensaje Enviado: 21/Junio/2019 a las 16:33
Hola!

Paco, aunque yo también creí que no se podía, resulta que si se puede Tongue 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 LongPtr
Sub Prueba()
FollowHyperlink "C:\Temp"
Stop  ' para verificar que se ha abierto la ventana
SendMessage FindWindow(vbNullString, "C:\Temp"), 274, 61536, 0
End Sub






Editado por Emilio - 21/Junio/2019 a las 16:33
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 21/Junio/2019 a las 17:06
¡ Hombre ! ....    ¡¡¡ El niño perdio !!!    LOL



Un saludo chiquitín ... Wink
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18836
Enlace directo a este mensaje Enviado: 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 If
Public 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/
Arriba
ffc2001ec Ver desplegable
Nuevo
Nuevo


Unido: 18/Julio/2017
Localización: Ecuador
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 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?
Arriba
ffc2001ec Ver desplegable
Nuevo
Nuevo


Unido: 18/Julio/2017
Localización: Ecuador
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 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
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18836
Enlace directo a este mensaje Enviado: 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/
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable