Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
Logo Excel Avanzado

GetOpenFilename en VBA

| 15 comentarios

Este es un método que nos permite obtener la ruta de un archivo a partir de un filtro establecido por el usuario, lo que es muy útil en diferentes situaciones que detallamos a continuación:

 

Sintaxis de GetOpenFilename 

A continuación, conoceremos su sintaxis en VBA:

Application.GetOpenFilename (FileFilter

, FilterIndex, Title, ButtonText, MultiSelect)

 

Parámetros de GetOpenFilename:

FileFilter: Establece los criterios de filtro. Por ejemplo: “Archivos de texto (*.txt),*.txt”. Si se omite, el valor predeterminado es “Todos los archivos (*.*),*.*”

FilterIndex: Especifica los números de índice de los criterios de filtro, si se omite se usa el primer filtro de archivo.

Title: Establece el título del cuadro de diálogo. Por defecto: “Abrir”

ButtonText: Usado en MAC

MultiSelect: True, permite la selección de varios archivos; False para seleccionar sólo uno (este es su valor predeterminado) En la práctica se evidencia mucho más la utilidad de esta herramienta. A continuación, un ejemplo.

 

Obtener la ruta eligiendo desde el explorador

Captura1 1 300x55 GetOpenFilename en VBA    

 

(Para ver el ejemplo de GetOpenFilename, puedes hacer click en la misma)

 

Para este ejemplo se establece un filtro de archivo de texto, se mostrará el cuadro de diálogo Abrir y si el usuario elige un nombre de archivo, la ruta se mostrará en la celda indicada (B7). Para comprender mejor las utilidades del método, se modificó también el título del cuadro de diálogo (Predeterminado “Abrir”). Se mostrará una ventana similar:

Imagen1 300x212 GetOpenFilename en VBA

(Para mayor visualización de  la imagen, hacer click en la misma)

 

Y eligiendo el archivo señalado, se obtendrá la cadena D:\Macros\txt3.txt

Filtra archivos de texto, Excel y PDF

Como se indica, es posible agregar varios filtros a la vez, para ese caso se agregarán las extensiones como sigue:

Captura 2 300x67 GetOpenFilename en VBA

(Para mayor visualización de  la imagen, hacer click en la misma)

A partir de este punto se podrá utilizar según la necesidad de cada uno.

 

Cargar imagen usando GetOpenFilename 

En el siguiente ejemplo usamos GetOpenFilename para identificar el archivo, en este caso una imagen para luego proceder a cargar,  para efectos del ejemplo en un Formulario en VBA, y en un image, en el primer caso la imagen tiene atributos configurados para ajustar el tamaño de la imagen, en el segundo caso no. 

 

Private Sub CommandButton2_Click()

Dim archivo As String

On Error GoTo control

archivo = Application.GetOpenFilename(filefilter:="Archivos jpg(*.jpg),*.jpg", Title:="Seleccione imagen")

If fname <> "false" Then

Image1.Picture = LoadPicture(archivo)

Hoja1.Image1.Picture = LoadPicture(archivo)

Me.Repaint

End If

control:

End Sub

 

Para descargar este ejemplo en VBA, y que puedas reutilizarlo puedes emplear el siguiente enlace: Seleccionar archivo Excel macro

Artículo realizado con al apoyo de: Lucia Rodriguez

15 comentarios

  1. Hola! Muy interesante tu aporte.
    Tengo una consulta, quiero que el nombre del archivo este incluido en la macro, es decir, que no sea necesario seleccionarlo en la ventada de exploración de archivos. Es posible indicar eso?

    Muchas gracias!

    • Para ello puedes usar FileDialog, por medio del initialFileName, puedes ver mas sobre el mismo en https://www.excel-avanzado.com/32140/seleccionar-carpeta-en-vba.html

  2. ¡Hola! Muy buen día... Duda, ¿sabes por qué razón me se ejecuta este método aunque yo no lo llame? Lo que pasa es que en mi macro hago cruce con otro libro el cual está activo, pero para hacer el cruce las fórmulas hacen referencia al otro libro: Range("Q2").FormulaR1C1 = _
    "= IFERROR(IF(ISERROR(INDEX('[MC trabajada.xlsm]Mesa de control'!C1:C11,MATCH(RC[-1],'[MC trabajada.xlsm]Mesa de control'!C10,0),7)),INDEX('[Gestiones trabajada.xlsm]Gestiones'!C1:C21,MATCH(RC[-1],'[Gestiones trabajada.xlsm]Gestiones'!C20,0),18), INDEX('[MC trabajada.xlsm]Mesa de control'!C1:C11,MATCH(RC[-1],'[MC trabajada.xlsm]Mesa de control'!C10,0),7)),""Por tocar"")", es ahí cuando me pide seleccionar el libro, acción que puedo cancelar, sin embargo, es molesto estar presionando cancelar unas 5 veces... ¿Sabes si puedo anular "GetOpenFilename")?

    • Por cierto... Gracias por la primera información : )

    • Debe ser porque no reconoce el archivo abierto en la fórmula que utilizas.

  3. Si, pero si ejecuto el cuadro de diálogo y cancelo la búsqueda me sale error.

  4. hola,
    como hago para cargar en una variable solo el nombre del archivo que abri?

    Saludos

    • Lo lograste?!! Yo tambien quiero hacer eso, pero no lo logro...

    • miRuta = Application.GetOpenFilename '(FileFilter:="All Files (*.*), *.*", Title:="Seleziona il file")
      miArchivo = DIR( miRuta)

  5. Hola es posible tener la ruta de la carpeta del archivo seleccionado. ¿Cómo lo haría?

  6. Mi instrucción Application.GetOpenFilename funciona a la perfección en windows pero en mac aparece error... cómo puedo hacer que funcione en MAC

    Gracias

  7. Hola, que modificación se le agregaría al codigo si solamente quiero saber el nombre del archivo sin su ruta completa?

  8. hola estimado, tengo una duda, lo que quiero es abrir un archivo txt o jpg o png desde vba y ordenar desde codigo que habra esos archivos no en excel si no en sus propias aplicaciones de lectura, una vez abiertos imprimirlos mediante codigo vba y luego cerrarlos de la misma manera mediante codigo, es posible?
    sacame de duda, y si no se puede en que otro programa podria realizar aquello? pynton quiza?
    un saludo estimado

  9. Ejemplo para una imagen

    Imag = Application.GetOpenFilename(FileFilter:= _
    "Immagini (*.jpg;*.jpeg;*.bmp), *.jpg;*.jpeg;*.bmp", _
    Title:="Carica Immaginee", MultiSelect:=False)

    miVariable= Dir(Imag)

Deja una respuesta

Los campos requeridos estan marcados con *.