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
(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:
(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:
(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
14/09/2017 a las 4:15 am
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!
03/03/2021 a las 10:23 am
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
29/10/2019 a las 10:57 am
¡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")?
29/10/2019 a las 10:58 am
Por cierto... Gracias por la primera información : )
10/09/2021 a las 3:14 pm
Debe ser porque no reconoce el archivo abierto en la fórmula que utilizas.
07/01/2020 a las 1:33 pm
Si, pero si ejecuto el cuadro de diálogo y cancelo la búsqueda me sale error.
03/03/2021 a las 10:26 am
Gracias Nixon
En el ejemplo "Cargar imagen usando GetOpenFilename" se usa on error para control el error, puedes ver mas de on error en https://www.excel-avanzado.com/30893/on-error-en-vba.html
26/03/2021 a las 1:20 pm
hola,
como hago para cargar en una variable solo el nombre del archivo que abri?
Saludos
18/05/2021 a las 12:19 pm
Lo lograste?!! Yo tambien quiero hacer eso, pero no lo logro...
19/04/2024 a las 9:04 am
miRuta = Application.GetOpenFilename '(FileFilter:="All Files (*.*), *.*", Title:="Seleziona il file")
miArchivo = DIR( miRuta)
25/05/2021 a las 5:17 pm
Hola es posible tener la ruta de la carpeta del archivo seleccionado. ¿Cómo lo haría?
05/10/2022 a las 2:15 am
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
06/12/2022 a las 12:23 pm
Hola, que modificación se le agregaría al codigo si solamente quiero saber el nombre del archivo sin su ruta completa?
25/03/2023 a las 3:51 pm
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
19/04/2024 a las 9:05 am
Ejemplo para una imagen
Imag = Application.GetOpenFilename(FileFilter:= _
"Immagini (*.jpg;*.jpeg;*.bmp), *.jpg;*.jpeg;*.bmp", _
Title:="Carica Immaginee", MultiSelect:=False)
miVariable= Dir(Imag)