Sentí un día la necesidad de investigar si era posible obtener un objeto que mostrara el Navegador de windows para seleccionar una ruta de un fichero, para posteriormente incorporar esta ruta o 'path' en algún otro código de mis macros.
Encontré el objeto Shell.Application que referenciándolo a la instrucción de VBA CreateObject; y una vez generado este código, empleándo el método BrowseForFolder, abriría nuestra ventana de navegación.
El siguiente ejercicio de programación en VBA lo encontré tras varias horas de búsqueda por la red, pero por su utilidad me decidí a incorporarlo en el blog.
El código en cuestión que abre un cuadro diálogo para navegar y poder seleccionar una ruta es:
Al ejecutar la macro 'SeleccionarDirectorio' nos aparecerá:
En el ejemplo he optado por un sencillo mensaje donde se muestra el resultado de la selección de la carpeta, pero obviamente podremos emplear esta dirección para cualquier otra cosa.
Encontré el objeto Shell.Application que referenciándolo a la instrucción de VBA CreateObject; y una vez generado este código, empleándo el método BrowseForFolder, abriría nuestra ventana de navegación.
El siguiente ejercicio de programación en VBA lo encontré tras varias horas de búsqueda por la red, pero por su utilidad me decidí a incorporarlo en el blog.
El código en cuestión que abre un cuadro diálogo para navegar y poder seleccionar una ruta es:
'generamos una macro con dos variables - Título y Directorio Sub SeleccionarDirectorio() 'definimos las variables que emplearemos Dim Titulo, Directorio As String Titulo = "Selecciona la ruta de tu carpeta" On Error Resume Next 'evitaría un error en caso de no seleccionar nada o pulsar ESC With CreateObject("shell.application") Directorio = .browseforfolder(0, Titulo, 0).Items.Item.Path End With: On Error GoTo 0 'la siguiente instruccíon IF ejecuta una acción a modo de ejemplo If Directorio = "" Then MsgBox "No has marcado ningún directorio.", , "Operación no válida" Else MsgBox "Ha seleccionado la siguiente ruta " & Directorio End If End Sub |
Al ejecutar la macro 'SeleccionarDirectorio' nos aparecerá:
En el ejemplo he optado por un sencillo mensaje donde se muestra el resultado de la selección de la carpeta, pero obviamente podremos emplear esta dirección para cualquier otra cosa.
Este ejemplo me encanta, pero yo necesitaria poder navegar hasta una carpeta determinada de una intranet desde internet, es posible?
ResponderEliminarEn principio esta herramienta habilita un explorador normal y corriente, por tanto, si los ficheros o carpetas de la intranet son accesibles desde un navegador estándar, no debería haber problemas.
ResponderEliminar¿Pero desde Internet???, no soy experto en esta materia, pero desde internet deberías conocer la IP del servidor donde se encuentra subida esa intranet, no???
Lo he probado y funciona a la perfección si seleccionas una carpeta pero no me funciona si selecciono el Escritorio. Tienes alguna sugerencia para que pueda yo elegir el escritorio?? Muchas gracias
ResponderEliminarHola Alberto,
Eliminarel Escritorio suele tener una ruta completa tipo:
C:\Users\Excelforo\Desktop
Slds
Sí, funciona seleccionando la ruta completa, pero si seleccionas la carpeta Escritorio que aparece en la ventana del explorador, entonces no devuelve nada... Utilizo Windows 7 y Office 2010
EliminarComplicada cuestión.. investigaré si existe una alternativa para seleccionar el escritorio.
EliminarSaludos
Genial aporte
ResponderEliminarSaludos, tengo dias devanandome los sesos porque necesito abrir el explorador para buscar entre diferentes imagenes una en especifica logro abrir el objeto que la va a contener pero no llego a la parte de abrir el explorador y elegir la imagen siempre logro una cosa o la otra pero no las dos juntas... hay alguna forma de lograrlo?????
ResponderEliminarHola Karen
Eliminarprueba con el método GetOpenFileName
http://excelforo.blogspot.com.es/2013/10/vba-el-metodo-getopenfilename-para.html
Creo es lo que buscas
Saludos
Hola.
ResponderEliminarHe asignado la macro a un botón en un formulario y funciona de maravilla. Tengo la siguiente duda: ¿Cómo hago para que, luego de mostrar el cuadro de dialogo (MsgBox "Ha seleccionado la siguiente ruta " & Directorio) se guarde, imprima o pegue la ruta seleccionada en la celda A1?
Muchísimas gracias por tu ayuda.
Hola Víctor,
Eliminardonde pone
If Directorio = "" Then
MsgBox "No has marcado ningún directorio.", , "Operación no válida"
Else
MsgBox "Ha seleccionado la siguiente ruta " & Directorio
End If
pondríamos
If Directorio = "" Then
MsgBox "No has marcado ningún directorio.", , "Operación no válida"
Else
range("A1").value= "Ha seleccionado la siguiente ruta " & Directorio
Saludos
End If
Ismaél muchas gracias. Lo dejé de la siguiente forma y funciona excelente.
EliminarSub SeleccionarDirectorio()
'definimos las variables que emplearemos
Dim Titulo, Directorio As String
Titulo = "Selecciona la ruta de tu carpeta"
On Error Resume Next
'evitaría un error en caso de no seleccionar nada o pulsar ESC
With CreateObject("shell.application")
Directorio = .browseforfolder(0, Titulo, 0).Items.Item.Path
End With: On Error GoTo 0
'la siguiente instruccíon IF ejecuta una acción a modo de ejemplo
If Directorio = "" Then
MsgBox "No has marcado ningún directorio.", , "Operación no válida"
Else
'mensaje e inserta la ruta en la celda A1
MsgBox "Ha seleccionado la siguiente ruta " & Directorio
Range("A1").Value = Directorio
End If
End Sub
;-)
Eliminarperfecto!
Un cordial saludo
Amigos.
ResponderEliminarEl path del escritorio se soluciona pinchando sobre el icono "Este equipo" y luego sobre la carpeta del escritorio. Les dejo una imagen:
- https://iswwnw-sn3302.files.1drv.com/y3p90ci66S4WYMkpkz-XhTk17LnW9dnhxbrkJnMOslSlCTX8myMl9_wRagYTp5HH8wUUWdD6rzMvfZKVk-ms7LIPthGBRLlGuWjPOJXGsZOQvvD_z9G6o09sRTMmAMcGRtqZjxh-J2gm2xCxf_y0vIYVg/Sin%20t%C3%ADtulo.png?psid=1
Imagen tomada desde S.O. Windows 10
ResponderEliminarHola una pregunta estoy tratando de hacer eso en Acces, pero como hago para que la direccion de la carpeta se coloque en un cuadro de texto en el que yo pueda guardar en mi base de datos como hipervinculo. gracias
ResponderEliminarHola,
Eliminarlo siento pero los códigos en VBA Access son algo distintos...
mejor consulta en un blog específico de Access.
Slds
Estimado Ismael: primero que nada felicitar por tan grande aporte.
ResponderEliminarAhora bien, mi consulta es qué código debiera agregar para que el explorador parta desde un path predeterminado por ejeplo C:\User\Desktop\Trabajo\ donde hay una serie de carpetas y sub carpetas. Agradecido desde ya.
Estimado Ismael y todos los que teneis esta inquietud, encontré respuesta a qué realizar, para que el Explorador parta desde una carpeta o subcarpeta sin que tengamos que recorrer todos los directorios uno a uno si es que esa aplicación la ocupamos siempre para marcar siempre una x carpeta dentro de otro directorio por llamarlo raiz:
EliminarPues bien, es tan fácil como declarar una variable del tipo Variant, y donde ésta contenga el path desde donde queremos que el directorio parta (ej.: "C:\User\Desktop\Pruebas\2017\") y luego esa variable incorporarla al Objeto BrowserdorFolder, como verán en este ejemplo:
Sub SeleccionarDirectorio()
'definimos las variables que emplearemos
Dim Titulo, Directorio As String
' Acá declaro una variante del tipo Variant que despues almacena
' el directorio raíz de donde deseo que parta.
Dim subfolder As Variant
Titulo = "Selecciona la ruta de tu carpeta"
' acá preparo la variable con el directorio desde donde deseo que aparezca
subfolder = "C:\Users\Desktop\Prueba\"
On Error Resume Next
'evitaría un error en caso de no seleccionar nada o pulsar ESC
With CreateObject("shell.application")
' En el objeto BrowserforFolder declaro la variable subfolder
Directorio = .BrowseForFolder(0, Titulo, 0, subfolder).Items.Item.path
End With: On Error GoTo 0
'la siguiente instruccíon IF ejecuta una acción a modo de ejemplo
If Directorio = "" Then
MsgBox "No has marcado ningún directorio.", , "Operación no válida"
Else
MsgBox "Ha seleccionado la siguiente ruta " & Directorio
End If
End Sub
Espero les sea también muy útil.
Saludos cordiales para ti Ismael por tan enorme trabajo.
Muchas a gracias a ti por el aporte Milton,
Eliminartodos los buenos consejos son bienvenidos
un cordial saludo