miércoles, 21 de abril de 2010

Explorador en VBA.

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:

'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á:

Explorador en VBA



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.

17 comentarios:

  1. Este ejemplo me encanta, pero yo necesitaria poder navegar hasta una carpeta determinada de una intranet desde internet, es posible?

    ResponderEliminar
  2. En 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.
    ¿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???

    ResponderEliminar
  3. 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

    ResponderEliminar
    Respuestas
    1. Hola Alberto,
      el Escritorio suele tener una ruta completa tipo:
      C:\Users\Excelforo\Desktop
      Slds

      Eliminar
    2. 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

      Eliminar
    3. Complicada cuestión.. investigaré si existe una alternativa para seleccionar el escritorio.
      Saludos

      Eliminar
  4. Saludos, 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?????

    ResponderEliminar
  5. Hola.
    He 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.

    ResponderEliminar
    Respuestas
    1. Hola Víctor,
      donde 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

      Eliminar
    2. Ismaél muchas gracias. Lo dejé de la siguiente forma y funciona excelente.

      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
      'mensaje e inserta la ruta en la celda A1
      MsgBox "Ha seleccionado la siguiente ruta " & Directorio
      Range("A1").Value = Directorio
      End If
      End Sub

      Eliminar
  6. Amigos.

    El 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

    ResponderEliminar
  7. Hola 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

    ResponderEliminar
    Respuestas
    1. Hola,
      lo siento pero los códigos en VBA Access son algo distintos...
      mejor consulta en un blog específico de Access.
      Slds

      Eliminar