View
212
Download
9
Category
Preview:
DESCRIPTION
macros
Citation preview
Niveles de referencias a archivos, hojas y celdas en Excel vbaPublished on 5 January, 2013 by Sergio Alejandro Campos in Excel, Excel vbaCuando programamos macros es parte fundamental el hacer referencias a libros de trabajo, hojas y celdas, ya sea para leer datos o escribir datos en las últimas.
En la siguiente imagen vemos la jerquía de objetos en Excel.
Si de niveles hablamos. el primer nivel en la jerarquía de objetos es el objeto Application que se refiere a la aplicación Microsoft Excel, la cual, entre otras propiedades se encuentran:
1. Addins. Es la colección de complementos instalados en Excel, activos o no.
2. DisplayAlerts. Especifica si se mostrarán o no los avisos de Excel durante la
ejecución de una macro.
3. Name. Es el nombre de Microsoft Excel como objeto.
4. OperatingSystem. Es el nombre del Sistema operativo actual.
5. ScreenUpdating. Se especifica si la pantalla se actualizara al momento de
ejecutar una macro.
6. StatusBar. Devuelve o establece el texto en la barra de estado.
7. Worksheets. Es la colección de archivos abiertos en una instancia de Excel.Ejemplos‘Asigar un texto a la barra de estado.
Application.StatusBar = “Ejemplo de texto”
‘Devolver la cantidad de archivos abierto.
MsgBox Application.Workbooks.Count
Colección WorkbooksEs la colección de todos los archivos abiertos en Excel. El objeto Workbooks tiene los siguientes métodos importantes:
1. Add. Crea un nuevo archivo.
2. Close. Cierra un archivo.
3. Open. Abre un archivo.
Si tenemos varios archivos abiertos y deseamos hacer referencia al archivo activo, podemos utilizar:
1. ActiveWorkbook.
2. ThisWorkbook.Si el archivo que deseamos aplicarle un método del objeto Workbooks es diferente al archivo activo, podemos utilizar:
1. Workbooks(“Archivo.xlsx”).MétodoEjemplos‘Cerrar el Libro2.
Workbooks(“Libro2.xlsx”).Close
‘Abrir un archivo.
Workbooks.Open (“C:\Users\Sergio A Campos H\Documents\Archivo.xlsx”)
Colección SheetsEs la colección de las hojas que tiene un libro de Excel. El objeto Worksheets tiene los siguientes métodos:
1. Add. Crea una nueva hoja.
2. Copy. Copia la hoja activa.
3. Delete. Elimina una hoja.
4. Select. Activa una hoja.
5. [Propiedad] Visible. Define si una hoja es visible o no.Otras referencias que podemos manejar las hojas de cálculo son:
1. ActiveSheet. Es la hoja activa.
2. Worksheets. Similar a Sheets.Ejemplos‘Añadir una hoja.
Sheets.Add
‘Ocultar la hoja 2.
Sheets(“Hoja2″).Visible = False
‘Mostrar la cantidad de hojas en el libro.
MsgBox Worksheets.Count
Objeto RangeSe refiere a un conjunto de celdas, filas o columnas en una hoja de cálculo. El objeto Rangetiene los siguientes métodos:
1. Activate. Activa una sola celda.
2. AddComment. Agrega un comentario.
3. AutoFit. Ajusta el ancho de una columna o tamaño de una fila.
4. Clear. Borra un rango o celda, incluido el formato.
5. ClearContents. Borra el contenido de un rango.
6. Copy. Copia un rango.
7. Select. Selecciona una celda o todo un rango.De la misma manera el objeto Range tiene entre otros, las siguientes propiedades:
1. Address. Devuelve la dirección del rango.
2. Count. Devuelve la cantidad de celdas del rango.
3. CurrentRegion. Se refiere a la región actual en base a la celda activa.
4. EntireColumn. Se refiere a la columna completa.
5. EntireRow. Se refiere a la fila completa
6. FormulaLocal. Se refiere a una fórmula en el rango actual establecida en el
idioma del usuario.
7. Offset. Se refiere a un rango desplazado hacia cualquier dirección.
8. Value. Devuelve o establece un texto a un rango.Si deseamos referirnos sólo a una celda, podemos usar:
1. ActiveCell. Se refiere a la celda activa.
2. Range(“A1”). Se refiere a la celda A1.
3. [A1]. Se refiere a la celda A1.Ejemplos‘Asignar un valor a un rango.
Range(“A1:A10″).Value = “Texto”
‘Asignar una fórmula a una celda.
Range(“B1″).FormulaLocal = “=CONTARA(A1:A10)”
4 maneras de ingresar un valor a una celdaPara asignar un valor a una celda, nos podemos ir de lo particular a lo general, todo dependiendo de si estamos en la hoja donde está celda o referirnos a una celda en otra hoja y otro libro.
[A1].Value = “A”
Range(“A2″).Value = “B”
Sheets(“Hoja1″).Range(“A3″).Value = “C”
Workbooks(“Libro1″).Sheets(“Hoja1″).Range(“A4″).Value = “D”
Tags: Application, Excel, Excel vba, EXCELeINFO, Range, Workbooks, Worksheets
« Video tutorial Ejecutar macro ...
Conociendo EXCELeINFO addin &#... »
Macro para modificar archivos de Excel sin abrirlosPublished on 22 July, 2013 by Sergio Alejandro Campos in Excel, Excel vba, TrucosLa siguiente macro que les comparto es en base a una consulta que me hicieron en en Blog. La pregunta decía:
La idea es la siguiente: Tengo “n” archivos y todos ellos contienen en la celda E6 una valor que quiero modificar. Los nuevos valores los tengo en un listado también en excel, que relaciona cada archivo.
¿Existe alguna manera de grabar una macro para cambiar automáticamente todos los archivos en lugar de abrir uno por uno?
Fue entonces cuando caí en la cuenta que ya antes había visto que usuarios tenían esa duda, por lo que decidí hacer este artículo.
Modificando un archivo en particularEn la siguiente macro, modificamos la ruta y nombre completo en la variable NombreArchivo.
Sub Modificar1XLCerrado()
'Declaramos variables
Dim Archivo As Application
Dim NombreArchivo As String
'
'Creamos el objecto Excel
Set Archivo = CreateObject("Excel.Application")
'
With Archivo
'
'Asignamos el nombre del archivo
NombreArchivo = "C:\carpeta\Libro1.xlsx"
'
'Validamos si el archivo ya está abierto
If IsFileOpen(NombreArchivo) Then
Else
'
With .Workbooks.Open(NombreArchivo)
'Hacemos las modificaciones en el archivo
.Worksheets("Hoja1").Range("A1").Value = "Total1"
.Worksheets("Hoja1").Range("A2").Value = 11
'Cerramos el archivo guardando cambios
.Close SaveChanges:=True
End With
End If
'
'Cerramos la aplicación de Excel
.Quit
End With
End SubModificando varios archivosPara esta macro recomiendo hacer una lista con las rutas y los nombres de los archivos a modificar. Antes de ejecutar la macro debemos seleccionar el listado para que el constructorFor Each Next haga el resto. La lista la podremos generar con mi herramienta que viene dentro de EXCELeINFO addin para enlistar archivos. La siguiente es una tabla de ejemplo.
Macro
Sub ModificarXLCerrados()
'Declaramos variables
Dim Archivo As Application
Dim Celda As Object
Dim NombreArchivo As String
'
'Creamos el objecto Excel
Set Archivo = CreateObject("Excel.Application")
'
With Archivo
'
'Recorremos cada celda de la selección para tomar el nombre de cada archivo
For Each Celda In Selection
NombreArchivo = Celda.Value
'
'Validamos si el archivo ya está abierto
If IsFileOpen(NombreArchivo) Then
Else
'
With .Workbooks.Open(NombreArchivo)
'Hacemos las modificaciones en el archivo
.Worksheets("Hoja1").Range("A1").Value = "Total"
.Worksheets("Hoja1").Range("A2").Value = 10
'Cerramos el archivo guardando cambios
.Close SaveChanges:=True
End With
End If
'
Next Celda
'
'Cerramos la aplicación de Excel
.Quit
End With
End SubFunción IsFileOpenLa siguiente función nos permitirá saber si el archivo a modificar ya está abierto. Es una función publicada en la página de Soporte de Microsoft y la podremos descargar desdehttp://support.microsoft.com/kb/291295/esMacro
' This function checks to see if a file is open or not. If the file is
' already open, it returns True. If the file is not open, it returns
' False. Otherwise, a run-time error occurs because there is
' some other problem accessing the file.
' Código de macro para comprobar si un archivo ya está abierto
' http://support.microsoft.com/kb/291295/es
'
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer
'
On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.
' Check to see which error occurred.
Select Case errnum
' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False
' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True
' Another error occurred.
Case Else
Error errnum
End Select
End Function
Tags: CreateObject, Excel, EXCELeINFO, IsFileOpen, Modificar Excel sin abrirlo
« Función (UDF) en Excel ...
Uso de control ToggleButton co... »
2 Comments
2 Responses
1. mario vergara
23 January, 2014 at 12:47
Gracias!
Reply
2. SebaXX
16 March, 2014 at 20:13
Estimado, intente aplicar tu código pero se me complico un poco, a ver si me puedes ayudar.
Necesito hacer una(s) macro(s) para modificar más rápido unos archivos. Tengo unas planillas mensuales que tienen hojas por días, de las cuales debo hacer un resumen mensual para luego obtener un resumen anual.
Con el complemento EXCELeINFO, obtuve las siguientes direcciones de archivos que deseo modificar
D:2008 ok11 Diario_ene_2008.xlsD:2008 ok12 Diario_Feb_2008.xlsD:2008 ok13 Diario_Mar_2008.xlsD:2008 ok14 Diario_Abr_2008.xlsD:2008 ok15 Diario_May_2008.xls
D:2008 ok16 Diario_Jun_2008.xlsD:2008 ok17 Diario_Jul_2008.xlsD:2008 ok18 Diario_Ago_2008.xlsD:2008 ok19 Diario_Sep_2008.xlsD:2008 ok110 Diario_oct_2008.xlsD:2008 ok111 Diario_Nov_2008.xlsD:2008 ok112 Diario_Dic_2008.xlsAparte de lo mostrado para el 2008, tengo archivos hasta el 2013.
Si me puedes ayudar a modificar tu código con las siguientes caracteristicas:
1ro) Debo modificar los nombres de las hojas de los archivos mensuales, para lo cual tengo esta macro que me funciona en un archivo, pero quiero cambiar los nombres de hojas sin tener que abrir los archivos uno por uno. Las Hojas me las renombra como 1, 2, 3, etc….
Sub RenombrarHojasEnOrden()Dim iX As IntegerFor iX = 1 To ActiveWorkbook.Sheets.CountSheets(iX).Name = Format(iX, “0”)Next iXEnd Sub2do) Para mi resumen mensual, tengo un archivo abierto llamado “Libro Resumen Mensual” con una “Hoja1″. Deseo que esta “Hoja1″ se copie en todos los archivos mensuales de los directorios mostrados.
3ro) Deseo hacer un libro resumen anual, que se cree a partir de todas las hojas resumen de los archivos mensuales. Osea de todas las “Hoja1″ que se copiaron en los archivos mensuales.
Supongo que tendré que crear 3 macros por separados. Si me puedes orientar, ya que soy muy principiante en esto de las macros.
Saludos.
Reply
Cómo abrir un archivo, con macros en Excel.
De Raymundo Ycaza 22 Comentarios
Leído 7911 veces.
Ya sabes crear macros y has hecho tus primeras pruebas básicas. Es hora de ir haciendo funciones más útiles que nos ayuden en nuestras aplicaciones de oficina. ¿Qué tal una macro que nos permita abrir un archivo?
Alex, uno de mis suscriptores, me consultó acerca de cómo podría abrir un archivo de Excel haciendo uso de macros para poder realizar algunas consultas sobre él. Así que decidí hacer un breve artículo en el que explico el
procedimiento paso a paso
Abrir un archivo con Macros.
La idea de la propuesta que tengo en mente, es que se muestre un cuadro de diálogo que te preguntará por la ubicación de tu archivo y, una vez que lo has seleccionado, ese archivo se abrirá inmediatamente. Así, pues, ¡vamos a ello!
Crea una función para tu código.
Lo primero que vas a hacer, es crear una función dentro de la cual vas a colocar todo el código que voy a mostrarte a continuación. Si aún tienes dudas de cómo crear una función en VBA, puedes pinchar aquí
La función que vas a crear, para el ejemplo, debe tener el nombre ‘abrirArchivo’.
El nombre del archivo y su ruta.
Primero, necesitas saber el nombre de tu archivo y “recordarlo” en una variable. Así pues, deberás crear una variable llamada ‘strArchivo’ y en ella almacenarás toda la ruta a tu archivo, incluída la extensión.
En mi caso, el archivo que quiero abrir se llama ‘MiArchivo.xls’ y la ruta en la que está guardado es ‘C:\MiCarpeta’.
Entonces, si junto todo, la ruta sería: ‘C:\MiCarpeta\MiArchivo.xls’.
En tu código, deberías de escribirlo así:
Nota
strArchivo = ‘C:\MiCarpeta\MiArchivo.xls’
Y con eso ya tendrías almacenado el nombre de tu archivo. Pero, ¿y si quisiera abrir un archivo diferente cada vez? Pues entonces, ¡lo haremos interactivo!
Usando el método GetOpenFilename
Para lograr que esto sea interactivo, necesitarás que el sistema te pregunte dónde está tu archivo cada vez que ejecutas el programa. Pero no haremos todo desde cero, sino que aprovecharemos el método GetOpenFilename que ya se encarga de hacer esto.
Simplemente reemplaza en tu código la parte donde tenías la ruta a tu archivo por lo siguiente:
Nota
Application.GetOpenFilename
Al final, el código que tengas, debe verse así:
Nota
strArchivo = Application.GetOpenFilename
Abriendo el archivo.
Bien, ya tienes la ruta completa de tu archivo. Ahora solo queda abrirlo directamente y, para esto, te ayudarás del método ‘OpenText’ del objeto ‘Workbooks’.
A este método debes pasarle el argumento ‘Filename’, en el cual asignarás el valor que tenías en la variable ‘strArchivo’.
La siguiente línea de código, debes escribirlo tal cual te muestro a continuación:
Nota
Workbooks.OpenText Filename: = strArchivo
Y hasta aquí ya has conseguido tu objetivo. Ahora verás que cuando ejecutas esta macro, se muestra un cuadro de diálogo donde eliges el archivo que quieres abrir y, a continuación, este se abre y se muestra en tu pantalla.
¿Y si el usuario cancela la acción?
Bueno, si el usuario cancela la acción se generará un error en tu programa que hará que este se caiga.
Entonces, ¿cómo evitarlo?
La solución está en una simple línea de código:
Nota
If strArchivo = False Then Exit Sub
Esta línea debes agregarla justo antes de la línea que se encarga de abrir el archivo, es decir, debe quedar así:
Nota
If strArchivo = False Then Exit Sub Workbooks.OpenText Filename:=strArchivo
¡Pero ahora quiero cerrarlo!
Tal y como se le ocurrió a Hugo Serrano (en los comentarios) se te puede ocurrir a ti que es necesario cerrar el archivo luego de abrirlo, así que para estos casos, puedes seguir los pasos que indico en esta entrada.
¿Cómo cerrar un archivo, usando macros?
¡Y hemos terminado!
Con estas pocas líneas de código, ya tienes un pequeño programa que se encarga de abrir un archivo de forma interactiva y que podrás integrar en tus nuevas aplicaciones para ampliar sus funcionalidades.
¿Muy útil, no crees?
Al final, debe quedarte un código similar a este que te muestro a continuación:
Nota
Sub abrirArchivo() strArchivo = Application.GetOpenFilename If strArchivo = False Then Exit Sub Workbooks.OpenText Filename:=strArchivo End Sub
Descargar el archivo terminado.
Si quieres descargar el archivo usado en este ejercicio, sólo sigue las instrucciones, es gratis.
[sociallocker id=”5276″]Descarga el archivo terminado.[/sociallocker]
Déjame tus comentarios y ayúdame a compartir este artículo.
Si te ha gustado este artículo o tienes alguna duda, déjamela en los comentarios. Y si crees que esta información puede ayudar a alguien más, ayúdame a difundirla en las redes sociales, usando los botones que
aparecen más abajo. ¡Gracias!
¡Nos vemos!
En versiones anteriores de Microsoft Access, puede mostrar el cuadro de diálogo de archivo mediante el control ActiveX delCuadro de diálogo común de Microsoft o mediante llamadas a la API de Windows.
Mediante el método FileDialog en Microsoft Office Access 2003, puede mostrar el cuadro de diálogo de archivo que se utiliza en Microsoft Access y determinar los archivos que el usuario selecciona. La colección SelectedItems del objeto FileDialog contiene las rutas de acceso a los archivos seleccionados por el usuario. Mediante el uso de un For-Each loop, puede enumerar esta colección y mostrar cada archivo. En el ejemplo siguiente se recorre la colección ItemsSelected y, a continuación, muestra los archivos en el cuadro de lista.
Microsoft proporciona ejemplos de programación únicamente con fines ilustrativos, sin
ninguna garantía expresa o implícita. Esto incluye, pero no se limita a, las garantías implícitas de comerciabilidad o idoneidad para un fin determinado. Este artículo asume que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.
1. Inicie Microsoft Access.2. Abra la base de datos de ejemplo Neptuno.mdb.3. En la ventana Base de datos, haga clic en formularios bajo objetos.4. En el panel derecho, haga doble clic en Crear formulario en vista
Diseño.5. Agregue los controles siguientes al formulario:6. Command button7. --------------------------8. Name: cmdFileDialog9. Caption: Add Files10. OnClick: [Event Procedure]11.12. List box13. -------------------------14. Name: FileList15. RowSourceType: Value List
16. En el menú Ver , haga clic en código para abrir el módulo del formulario en el Editor de Visual Basic de Microsoft.
17. En el menú Herramientas , haga clic en referencias.18. En lasreferencias:DatabaseNamecuadro de diálogo, haga clic para activar
la casilla de verificación Biblioteca de objetos de Microsoft Office 11.0 y, a continuación, haga clic en Aceptar.
19. Agregue el código siguiente al módulo del formulario:20. Option Compare Database21. Option Explicit22. 23. Private Sub cmdFileDialog_Click()24.25. ' This requires a reference to the Microsoft Office 11.0
Object Library.26.27. Dim fDialog As Office.FileDialog28. Dim varFile As Variant29.30. ' Clear the list box contents.31. Me.FileList.RowSource = ""32.33. ' Set up the File dialog box.34. Set fDialog =
Application.FileDialog(msoFileDialogFilePicker)35. With fDialog36. ' Allow the user to make multiple selections in the
dialog box.37. .AllowMultiSelect = True38. 39. ' Set the title of the dialog box.
40. .Title = "Select One or More Files"41.42. ' Clear out the current filters, and then add your
own.43. .Filters.Clear44. .Filters.Add "Access Databases", "*.MDB"45. .Filters.Add "Access Projects", "*.ADP"46. .Filters.Add "All Files", "*.*"47.48. ' Show the dialog box. If the .Show method returns
True, the49. ' user picked at least one file. If the .Show method
returns50. ' False, the user clicked Cancel.51. If .Show = True Then52. ' Loop through each file that is selected and
then add it to the list box.53. For Each varFile In .SelectedItems54. Me.FileList.AddItem varFile55. Next56. Else57. MsgBox "You clicked Cancel in the file dialog
box."58. End If59. End With60. End Sub
61. Guarde el formulario como Form1y ciérrelo.62. En la ventana Base de datos, seleccione Form1y, a continuación, haga clic
en Abrir para abrir el formulario en la vista formulario.63. Haga clic en Agregar archivos. Aparecerá el cuadro de
diálogo Seleccione uno o más archivos .64. Seleccione uno o más archivos y, a continuación, haga clic en Aceptaro
haga clic en Cancelar.Si selecciona uno o más archivos, observará que los nombres de archivo aparecen en el cuadro de lista. Si hace clic en Cancelar, puede aparecer un mensaje que indica que se hizo clic en Cancelar.
Volver arriba | Enviar comentarios
Microsoft proporciona ejemplos de programación únicamente con fines ilustrativos, sin ninguna garantía expresa o implícita. Esto incluye, pero no se limita a, las garantías implícitas de comerciabilidad o idoneidad para un fin determinado. Este artículo asume que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.
Método 1
Este código de Visual Basic utiliza las constantes xlDialogOpen y xlDialogSaveAs para mostrar el cuadro de diálogo.
Para abrir un archivo:
Application.Dialogs(xlDialogOpen).Show
Para abrir un archivo denominado "myacct.xls" en el directorio "c:\personal":
Application.Dialogs(xlDialogOpen).Show _
("c:\personal\myacct.xls")
Para guardar un archivo:
Application.Dialogs(xlDialogSaveAs).Show
Para guardar un archivo en el directorio "c:\public" denominado "acct.xls":
Application.Dialogs(xlDialogSaveAs).Show _
("c:\public\acct.xls")
Método 2
Utilice los métodos GetOpenFilename y GetSaveAsFilename para recuperar el nombre de archivo junto con los métodos Open o Close.
Para abrir un archivo:
Workbooks.Open filename:=Application.GetOpenFilename
Para guardar el libro activo:
Activeworkbook.SaveAs filename:=Application.GetSaveAsFilename
Método 3
Utilizar los equivalentes del lenguaje de macros de Microsoft Excel 4.0 para mostrar los cuadros de diálogo.
Para abrir un archivo:
Application.ExecuteExcel4Macro("OPEN?()")
Para guardar un archivo:
Application.ExecuteExcel4Macro("SAVE.AS?()")
Para obtener información adicional, consulte los siguientes artículos en Microsoft Knowledge Base:
104581 Macro para cambiar el valor predeterminado *. XL * a *. * en el cuadro de diálogo Abrir
Volver arriba | Enviar comentarios
Excel VBA Open File DialogMAR 11, 2014BY AZUROUSIN EXCEL
There may be times when you need to ask the user to select
a file to open. This can be done using the open file dialog. Keep
in mind that the open file dialogs doesn’t actuallyopen anything.
It returns the path of the file or files selected.
You can download the workbook for this article here.
Jump To:
Example 1 Example 2 Custom Title Start Folder Path, InitialFilePath Filter File Types, Filters
-
Example 1, Select Single File:
In this example an open file dialog is displayed and the user is
asked to select a file toopen. The path of the file selected by
the user is then printed in cell A2. Note that theopen file
dialog doesn’t actually open any files, it only returns
the path the user has selected:
Sub Example1()
Dim intChoice As Integer
Dim strPath As String
'only allow the user to select one file
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect
= False
'make the file dialog visible to the user
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If intChoice <> 0 Then
'get the file path selected by the user
strPath = Application.FileDialog( _
msoFileDialogOpen).SelectedItems(1)
'print the file path to sheet 1
Cells(2, 1) = strPath
End If
End Sub
Result:
After selecting the file “test.txt” from the directory “D:Temp”,
the path is printed in cell A2:
The line below tells the program to only allow the user to select
one file:
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect
= False
The line below makes the open file dialog visible to the user:
intChoice =
Application.FileDialog(msoFileDialogOpen).Show
If the user cancels the dialog, intChoice will return “0”. The line
below returns the path selected by the user:
strPath = Application.FileDialog( _
msoFileDialogOpen).SelectedItems(1)
-
Example 2, Select Multiple Files:
In the example below an open file dialog is opened and asks the
user to select files toopen. Unlike Example 1 the user is
permitted to select multiple files in this example. Thepath of all
the files selected by the user is printed in column A. Note that
the open file dialog doesn’t actually open any files, it only
returns the path the user has selected:
Sub Example2()
Dim intChoice As Integer
Dim strPath As String
Dim i As Integer
'allow the user to select multiple files
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect
= True
'make the file dialog visible to the user
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If intChoice <> 0 Then
'get the file path selected by the user
For i = 1 To Application.FileDialog(msoFileDialogOpen _
).SelectedItems.Count
strPath = Application.FileDialog(msoFileDialogOpen _
).SelectedItems(i)
'print the file path to sheet 1
Cells(i + 1, 1) = strPath
Next i
End If
Result:
After selecting the 3 files, “Test1.txt”, “Test2.txt” and “Test3.txt”
from the folder “D:Temp” their paths are printed in Column A:
-
Custom Title:
By default the title of the Open File Dialog is “Open File”:
Using the .Title property you can set a custom title for
the dialog. In the example below the title “Random Title For
Dialog” will be used:
Sub Example3()
Dim intChoice As Integer
'change the display name of the open file dialog
Application.FileDialog(msoFileDialogOpen).Title = _
"Random Title For Dialog"
'make the file dialog visible to the user
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If intChoice <> 0 Then
'your code here
End If
End Sub
Result:
-
Start Folder Path, InitialFileName: Lets say there is a specific folder we would want the dialog to
start in. This could be set by the InitialFileName property. In the
example below the open file dialog will start in
the directory “D:TempFolder to Start“:
Sub Example4()
Dim intChoice As Integer
'Select the start folder
Application.FileDialog(msoFileDialogOpen _
).InitialFileName = "D:TempFolder to Start"
'make the file dialog visible to the user
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If intChoice <> 0 Then
'your code here
End If
End Sub
Result:
-
Filter File Types, Filters: In the example below there are multiple file types in our
folder, .txt, .xlsx, .docx:
But when the open file dialog appears, we only want the user to
see the .txt files. This can be achieved by applying a filter:
Sub Example5()
Dim intChoice As Integer
'Remove all other filters
Call Application.FileDialog(msoFileDialogOpen).Filters.Clear
'Add a custom filter
Call Application.FileDialog(msoFileDialogOpen).Filters.Add( _
"Text Files Only", "*.txt")
'make the file dialog visible to the user
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'determine what choice the user made
If intChoice <> 0 Then
'your code here
End If
End Sub
Result:
The line below removes all other filter options from the filter list:
Call Application.FileDialog(msoFileDialogOpen).Filters.Clear
The line below adds a custom filter. The name of the custom
filter is “Text Files Only”. The expressions “*.txt” means that we
only want the files that end in “.txt” to appear in the dialog:
Call Application.FileDialog(msoFileDialogOpen _
).Filters.Add("Text Files Only", "*.txt")
You can download the workbook for this article here.
See Also:
Excel VBA, Reading Text Files. Find and List All Files and Folders in a Directory
If you need assistance with your code, or you are looking for a
VBA programmer to hire feel free to contact me. Also please visit
my website www.software-solutions-online.com
Tagged with: Dialogs, Excel, File and Folders, Open File Dialog, VBA
Recommended