Macro abre explorador de archivos de Windows



Al programar macros en reiteradas veces tendremos que abrir el explorador de archivos de Windows para seleccionar un archivo y que este sea usado en la macro, lo difícil es encontrar como se logra esto; no obstante método Application.GetOpenFilename soluciona nuestro problema, te voy a mostrar en primer lugar su sintaxis y posteriormente agregaré varios ejemplos sobre su uso, he incorporado un archivo de muestra donde filtra varios tipos de archivos, también como se usa la propiedad Multiselect, es decir que se puedan seleccionar varios archivos a la vez y que estos puedan ser usados en la macro. En el ejemplo Macro que lista archivos y subcarptetas se encuentra un ejemplo relacionado con este pos, al igual que en el ejemplo de Macro que abre explorador de archivos e inserta fotos; también se expone una macro relacionada en el post busca archivo en directorio, si no lo encuentra abre el explorador de archivos.

MASTERCARD PAYONEER

La Application.GetOpenFilename abre el cuadro de dialogo de Windows o explorador de archivos de Windows, con este método lo que se hace es obtener la dirección del archivo que se selecciona o el nombre escrito por el usuario, pero no se abre ningún archivo, como sucede con cualquier programa; en otras palabras y ejemplificando; supongamos que en Excel  se selecciona el archivos y luego el menú abrir, aparece el explorador de archivos de Windows, pero si nosotros hacemos click en algún archivo, en este caso de Excel, se abre el archivo; con Application.GetOpenFilename el archivo no se abre, sino que solo se obtiene su dirección, que puede ser puesta en una variable y usado por la macro.

La sintaxis es la siguiente: 

expresión.GetOpenFilename(FileFilterFilterIndexTitleButtonTextMultiSelect) 


Expresión: es una variable que representa un objeto Application, es obligatorio.

FileFilter: puede ser opcional, es una cadena que especifica los criterios de filtrado de archivos.

FilterIndex: es opcional, es el número de índice de los criterios de filtrado de archivos va desde 1 hasta el número de filtros especificado por FileFilter, si se omite, se usa el primer filtro de archivo.

Title: también es opcional, especifica el Titulo que tendrá el cuadro de diálogo, si se omite será por defecto "Abrir" el titulo.

ButtonText: es opcional, se usa solo en Macintosh, no nos ocuparemos de él.

MultiSelect: es opcional, pero importante ya que en muchos casos se querrá seleccionar más de un archivo a la vez; el valor True permite seleccionar varios nombre de archivo y False solo se permite un nombre, si se omite este argumento toma el valor predeterminado o por defecto False, el valor devuelto es de tipo Variant como en todos los argumentos de este método.

Antes de seguir con el desarrollo y en el caso que no tengas conocimiento suficiente sobre el manejo de hojas de Excel, te recomiendo antes de introducirte en el mundo de las macros, que leas un excelente libro sobre Excel el que te ayudará manejar las planillas de cálculo, debes hacer click acá, si quieres un libro sobre Excel, en inglés, entonces debes hacer click acá.

Ahora explicare un poco más acerca del argumento FileFilter, este consta de pares de cadenas de filtros de archivos seguidas de la especificación de filtro de archivo comodín de MS-DOS, separados cada par y cada parte por comas. Se enumera cada par individual en el cuadro de lista desplegable Tipo de archivo. Por ejemplo, la siguiente cadena especifica dos filtros de archivos, texto y complementos: "Archivos de texto (*.txt),*.txt,Archivos de complementos (*.xla),*.xla"; para que puedas entender más a fondo lo expuesto, sugiero que se bajes el archivo desde el link del final, veas su funcionamiento y codificación.

Para usar varias expresiones comodín de MS-DOS para un solo tipo de filtro de archivo, se debe separar dichas expresiones con ";" (punto y coma); ejemplo, "Archivos de Excel (*.xl*; *.txt),*.xl*;*.txt"; en este caso se filtran todos los archivos de Excel y Texto, aquí se agrega como filtro *.xl*, siendo * (comodin), en este caso se filtran los fichero cuyo nombre de archivo sea cualquiera, es decir todos los archivos y la extensión empiece con ".xl" sea cual fuere los siguientes caracteres, con esto se filtra la mayoría de los formatos de puede generar Excel, es decir extensión:

.xlsx: formato predeterminado para archivos de Excel posteriores a versión 2007.
.xlsm: formato para archivos de Excel que contengan macros.
.xlsb: formato para archivos binarios.
.xltx: formato de archivos para plantillas en versiones de Excel posteriores a versión 2007.
.xltm: formato de archivos para plantillas con macros en versiones de Excel posteriores a versión 2007.
.xls: formato de archivo Excel en versiones de Excel 97 a 2003.
.xlt: formato de archivo para plantillas en versiones de Excel 97 a 2003.
.xlam: formato de archivo de complemento en versiones posteriores a la versión 2007.
.xla: formato de complemento en versiones Excel 97 a 2003.
.xlw: formato de archivos de Excel en versión 4.0.

En caso que se omita el parámetro FileFilter, se tomá el valor por defecto que es "Todos los archivos (*.*),*.*".

Desde el link del final se puede descargar el archivo de ejemplo de esta manera podrás ver su funcionamiento en forma más detallada. El código de VBA o Macro de Excel abre el explorador de archivos de Windows ó cuadro de diálogo de Windows para abrir archivos, en los siguientes códigos se muestra la forma de utilizar Application.GetOpenFilename; principalmente la forma de filtrar archivos y seleccionar varios archivo con multiselect.

Código que se debe insertar en Módulo de la hoja donde haremos correr la macro.

En el siguiente vídeo podrás observar un explicación de como funcionan las macros que se incorporan es este ejemplo:




Código que filtra todos los archivos



Sub AbreExploradorTodos()
myfile = Application.GetOpenFilename()
Cells(2, 2) = myfile
End Sub


Código que filtra archivos de Excel

Sub AbreExploradorExcel()
myfile = Application.GetOpenFilename("Archivos Excel (*.xl*), *.xl*")
Cells(3, 2) = myfile
End Sub

Código que filtra archivos de Word

Sub AbreExploradorWord()
myfile = Application.GetOpenFilename("Archivos Word (*.doc*), *.doc*")
Cells(4, 2) = myfile
End Sub

Código que filtra archivos Txt

Sub AbreExploradorTexto()
myfile = Application.GetOpenFilename("Archivos de Texto (*.txt*), *.txt*")
Cells(5, 2) = myfile
End Sub

Código que filtra archivos JPG

Sub AbreExploradorJPG()
myfile = Application.GetOpenFilename("Archivos de Imagenes (*.jpg*), *.jpg*")
Cells(6, 2) = myfile
End Sub

Código que filtra archivos PDF

Sub AbreExploradorPdf()
myfile = Application.GetOpenFilename("Archivos PDF (*.pdf*), *.pdf*")
Cells(7, 2) = myfile
End Sub

Código que filtra archivos de Word, Excel y PDF a la vez

Sub AbreExploradorWordExcelPdf()
myfile = Application.GetOpenFilename("Archivos Word Excel PDF (*.doc*;*.xls*;*.pdf*), *.doc*;*.xls*;*.pdf*")
Cells(8, 2) = myfile
End Sub

Código que filtra archivos JPG, PNP y BMP a la vez

Sub AbreExploradorJpgPngBmp()
myfile = Application.GetOpenFilename("Archivos JPG PNG BMP  (*.jpg*;*.png*;*.bmp*), *.jpg*;*.png*;*.bpm*")
Cells(9, 2) = myfile
End Sub



    

Código que aplica un título al cuadro de diálogo

Sub AbreExploradorTitle()
myfile = Application.GetOpenFilename("Archivos Excel (*.xls*), *.xls*", , "SELECCIONE ARCHIVO PARA EJECUTAR LA MACRO DE VBA")
Cells(10, 2) = myfile
End Sub

Código que permite seleccionar varios archivos a la vez, MULTISELECT

Sub AbreExploradorMultiselect()
myfile = Application.GetOpenFilename("Archivos Excel (*.xls*), *.xls*", , , , True)
If TypeName(myfile) = "Boolean" Then Exit Sub
file = 11
For i = LBound(myfile) To UBound(myfile)
Cells(file, 2) = myfile(i)
file = file + 1
Next i
End Sub


Otros post de utilidad:
Recorrer filas y contar celdas con datos
Recuperar password o contraseña de hoja bloqueada



Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.



If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends