Вы находитесь на странице: 1из 30

Niveles de referencias a archivos, hojas y

celdas en Excel vba


Published on 5 January, 2013 by Sergio Alejandro Campos in Excel, Excel vba

Cuando 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 jerqua de objetos en Excel.

Si de niveles hablamos. el primer nivel en la jerarqua de objetos es el


objeto Application que se refiere a la aplicacin Microsoft Excel, la cual, entre otras
propiedades se encuentran:
1.
Addins. Es la coleccin de complementos instalados en Excel, activos o no.
2.
3.
4.
5.

DisplayAlerts. Especifica si se mostrarn o no los avisos de Excel durante


la ejecucin de una macro.
Name. Es el nombre de Microsoft Excel como objeto.
OperatingSystem. Es el nombre del Sistema operativo actual.
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 coleccin 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
Coleccin Workbooks
Es la coleccin de todos los archivos abiertos en Excel. El objeto Workbooks tiene
los siguientes mtodos importantes:
1.
2.

Add. Crea un nuevo archivo.


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 mtodo del objeto Workbooks es diferente
al archivo activo, podemos utilizar:
1.
Workbooks(Archivo.xlsx).Mtodo
Ejemplos
Cerrar el Libro2.
Workbooks(Libro2.xlsx).Close
Abrir un archivo.
Workbooks.Open (C:\Users\Sergio A Campos H\Documents\Archivo.xlsx)
Coleccin Sheets
Es la coleccin de las hojas que tiene un libro de Excel. El objeto Worksheets tiene
los siguientes mtodos:
1.
2.

Add. Crea una nueva hoja.


Copy. Copia la hoja activa.

3.
4.

Delete. Elimina una hoja.


Select. Activa una hoja.

5.
[Propiedad] Visible. Define si una hoja es visible o no.
Otras referencias que podemos manejar las hojas de clculo son:
1.
ActiveSheet. Es la hoja activa.
2.
Worksheets. Similar a Sheets.
Ejemplos
Aadir una hoja.
Sheets.Add
Ocultar la hoja 2.
Sheets(Hoja2).Visible = False
Mostrar la cantidad de hojas en el libro.
MsgBox Worksheets.Count
Objeto Range
Se refiere a un conjunto de celdas, filas o columnas en una hoja de clculo. El
objeto Rangetiene los siguientes mtodos:
1.
Activate. Activa una sola celda.
2.
3.

AddComment. Agrega un comentario.


AutoFit. Ajusta el ancho de una columna o tamao de una fila.

4.
5.

Clear. Borra un rango o celda, incluido el formato.


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 direccin del rango.
2.
3.

Count. Devuelve la cantidad de celdas del rango.


CurrentRegion. Se refiere a la regin actual en base a la celda activa.

4.
5.

EntireColumn. Se refiere a la columna completa.


EntireRow. Se refiere a la fila completa

6.

FormulaLocal. Se refiere a una frmula en el rango actual establecida en el


idioma del usuario.

7.
Offset. Se refiere a un rango desplazado hacia cualquier direccin.
8.
Value. Devuelve o establece un texto a un rango.
Si deseamos referirnos slo 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 frmula a una celda.
Range(B1).FormulaLocal = =CONTARA(A1:A10)
4 maneras de ingresar un valor a una celda
Para 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 abrirlos
Published on 22 July, 2013 by Sergio Alejandro Campos in Excel, Excel vba, Trucos

La siguiente macro que les comparto es en base a una consulta que me hicieron en
en Blog. La pregunta deca:
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
tambin en excel, que relaciona cada archivo.
Existe alguna manera de grabar una macro para cambiar automticamente
todos los archivos en lugar de abrir uno por uno?
Fue entonces cuando ca en la cuenta que ya antes haba visto que usuarios tenan
esa duda, por lo que decid hacer este artculo.
Modificando un archivo en particular
En 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 aplicacin de Excel
.Quit
End With
End Sub
Modificando varios archivos
Para 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 seleccin 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 aplicacin de Excel
.Quit
End With
End Sub
Funcin IsFileOpen
La siguiente funcin nos permitir saber si el archivo a modificar ya est abierto.
Es una funcin publicada en la pgina de Soporte de Microsoft y la podremos
descargar desdehttp://support.microsoft.com/kb/291295/es
Macro
' 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.
' Cdigo 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

Funcin (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 cdigo pero se me complico un poco, a ver si me


puedes ayudar.
Necesito hacer una(s) macro(s) para modificar ms rpido unos archivos.
Tengo unas planillas mensuales que tienen hojas por das, 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
D:2008
D:2008
D:2008
D:2008

ok11
ok12
ok13
ok14
ok15

Diario_ene_2008.xls
Diario_Feb_2008.xls
Diario_Mar_2008.xls
Diario_Abr_2008.xls
Diario_May_2008.xls

D:2008 ok16 Diario_Jun_2008.xls


D:2008 ok17 Diario_Jul_2008.xls
D:2008 ok18 Diario_Ago_2008.xls
D:2008 ok19 Diario_Sep_2008.xls
D:2008 ok110 Diario_oct_2008.xls
D:2008 ok111 Diario_Nov_2008.xls
D:2008 ok112 Diario_Dic_2008.xls
Aparte de lo mostrado para el 2008, tengo archivos hasta el 2013.
Si me puedes ayudar a modificar tu cdigo 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 Integer
For iX = 1 To ActiveWorkbook.Sheets.Count
Sheets(iX).Name = Format(iX, 0)
Next iX
End Sub
2do) 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

Cmo abrir un archivo, con macros en Excel.

De Raymundo Ycaza 22 Comentarios


Ledo 7911 veces.

Ya sabes crear macros y has hecho tus primeras pruebas bsicas. Es


hora de ir haciendo funciones ms 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 cmo podra abrir un
archivo de Excel haciendo uso de macros para poder realizar algunas consultas
sobre l. As que decid hacer un breve artculo 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 dilogo que te preguntar por la ubicacin de tu archivo y,
una vez que lo has seleccionado, ese archivo se abrir inmediatamente.
As, pues, vamos a ello!
Crea una funcin para tu cdigo.

Lo primero que vas a hacer, es crear una funcin dentro de la cual vas a
colocar todo el cdigo que voy a mostrarte a continuacin. Si an tienes
dudas de cmo crear una funcin en VBA, puedes pinchar aqu
La funcin 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, debers crear una variable llamada strArchivo y en
ella almacenars toda la ruta a tu archivo, includa la extensin.
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 sera: C:\MiCarpeta\MiArchivo.xls.
En tu cdigo, deberas de escribirlo as:
Nota

strArchivo = C:\MiCarpeta\MiArchivo.xls
Y con eso ya tendras almacenado el nombre de tu archivo. Pero, y si
quisiera abrir un archivo diferente cada vez? Pues entonces, lo haremos
interactivo!
Usando el mtodo GetOpenFilename

Para lograr que esto sea interactivo, necesitars que el sistema te


pregunte dnde est tu archivo cada vez que ejecutas el programa. Pero
no haremos todo desde cero, sino que aprovecharemos el mtodo
GetOpenFilename que ya se encarga de hacer esto.
Simplemente reemplaza en tu cdigo la parte donde tenas la ruta a tu
archivo por lo siguiente:
Nota

Application.GetOpenFilename
Al final, el cdigo 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 ayudars del mtodo OpenText del objeto
Workbooks.
A este mtodo debes pasarle el argumento Filename, en el cual
asignars el valor que tenas en la variable strArchivo.
La siguiente lnea de cdigo, debes escribirlo tal cual te muestro a
continuacin:
Nota

Workbooks.OpenText Filename: = strArchivo


Y hasta aqu ya has conseguido tu objetivo. Ahora vers que cuando
ejecutas esta macro, se muestra un cuadro de dilogo donde eliges el
archivo que quieres abrir y, a continuacin, este se abre y se muestra en
tu pantalla.

Y si el usuario cancela la accin?

Bueno, si el usuario cancela la accin se generar un error en tu


programa que har que este se caiga.

Entonces, cmo evitarlo?


La solucin est en una simple lnea de cdigo:
Nota

If strArchivo = False Then Exit Sub


Esta lnea debes agregarla justo antes de la lnea 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.
Cmo cerrar un archivo, usando macros?
Y hemos terminado!

Con estas pocas lneas de cdigo, ya tienes un pequeo programa que


se encarga de abrir un archivo de forma interactiva y que podrs
integrar en tus nuevas aplicaciones para ampliar sus funcionalidades.

Muy til, no crees?


Al final, debe quedarte un cdigo similar a este que te muestro a
continuacin:

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, slo sigue las


instrucciones, es gratis.
[sociallocker id=5276]Descarga el archivo terminado.
[/sociallocker]
Djame tus comentarios y aydame a compartir este artculo.

Si te ha gustado este artculo o tienes alguna duda, djamela en los


comentarios. Y si crees que esta informacin puede ayudar a alguien
ms, aydame a difundirla en las redes sociales, usando los botones que

aparecen ms abajo. Gracias!


Nos vemos!

En versiones anteriores de Microsoft Access, puede mostrar el cuadro de dilogo de


archivo mediante el control ActiveX delCuadro de dilogo comn de Microsoft o
mediante llamadas a la API de Windows.
Mediante el mtodo FileDialog en Microsoft Office Access 2003, puede mostrar el
cuadro de dilogo de archivo que se utiliza en Microsoft Access y determinar los
archivos que el usuario selecciona. La coleccin 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 coleccin y

mostrar cada archivo. En el ejemplo siguiente se recorre la coleccin ItemsSelected y,


a continuacin, muestra los archivos en el cuadro de lista.
Microsoft proporciona ejemplos de programacin nicamente con fines ilustrativos, sin
ninguna garanta expresa o implcita. Esto incluye, pero no se limita a, las garantas
implcitas de comerciabilidad o idoneidad para un fin determinado. Este artculo asume
que est familiarizado con el lenguaje de programacin que se muestra y con las
herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de
soporte tcnico de Microsoft pueden explicarle la funcionalidad de un determinado
procedimiento, pero no modificarn estos ejemplos para ofrecer mayor funcionalidad ni
crearn procedimientos que cumplan sus requisitos especficos.
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
Diseo.
5. Agregue los controles siguientes al formulario:
6.
Command button
7.
-------------------------8.
Name: cmdFileDialog
9.
Caption: Add Files
10.
OnClick: [Event Procedure]
11.
12.
List box
13.
------------------------14.
Name: FileList
15.
RowSourceType: Value List
16. En el men Ver , haga clic en cdigo para abrir el mdulo del formulario
en el Editor de Visual Basic de Microsoft.
17. En el men Herramientas , haga clic en referencias.
18. En lasreferencias:DatabaseNamecuadro de dilogo, haga clic para activar
la casilla de verificacin Biblioteca de objetos de Microsoft Office
11.0 y, a continuacin, haga clic en Aceptar.
19. Agregue el cdigo siguiente al mdulo del formulario:
20. Option Compare Database
21. Option Explicit
22.
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.FileDialog
28. Dim varFile As Variant
29.
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 fDialog
36.
' Allow the user to make multiple selections in the dialog box.
37.
.AllowMultiSelect = True
38.

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.Clear
44.
.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, the
49.
' user picked at least one file. If the .Show method returns
50.
' False, the user clicked Cancel.
51.
If .Show = True Then
52.
' Loop through each file that is selected and then add it to the list box.
53.
For Each varFile In .SelectedItems
54.
Me.FileList.AddItem varFile
55.
Next
56.
Else
57.
MsgBox "You clicked Cancel in the file dialog box."
58.
End If
59. End With
60. End Sub
61. Guarde el formulario como Form1y cirrelo.
62. En la ventana Base de datos, seleccione Form1y, a continuacin, haga clic
en Abrir para abrir el formulario en la vista formulario.
63. Haga clic en Agregar archivos. Aparecer el cuadro de
dilogo Seleccione uno o ms archivos .
64. Seleccione uno o ms archivos y, a continuacin, haga clic en Aceptaro
haga clic en Cancelar.
Si selecciona uno o ms 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 programacin nicamente con fines ilustrativos, sin


ninguna garanta expresa o implcita. Esto incluye, pero no se limita a, las garantas
implcitas de comerciabilidad o idoneidad para un fin determinado. Este artculo asume
que est familiarizado con el lenguaje de programacin que se muestra y con las
herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de
soporte tcnico de Microsoft pueden explicarle la funcionalidad de un determinado
procedimiento, pero no modificarn estos ejemplos para ofrecer mayor funcionalidad ni
crearn procedimientos que cumplan sus requisitos especficos.

Mtodo 1
Este cdigo de Visual Basic utiliza las constantes xlDialogOpen y xlDialogSaveAs para
mostrar el cuadro de dilogo.
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")

Mtodo 2
Utilice los mtodos GetOpenFilename y GetSaveAsFilename para recuperar el nombre
de archivo junto con los mtodos Open o Close.
Para abrir un archivo:
Workbooks.Open filename:=Application.GetOpenFilename
Para guardar el libro activo:
Activeworkbook.SaveAs filename:=Application.GetSaveAsFilename

Mtodo 3
Utilizar los equivalentes del lenguaje de macros de Microsoft Excel 4.0 para mostrar los
cuadros de dilogo.
Para abrir un archivo:
Application.ExecuteExcel4Macro("OPEN?()")
Para guardar un archivo:
Application.ExecuteExcel4Macro("SAVE.AS?()")
Para obtener informacin adicional, consulte los siguientes artculos en Microsoft
Knowledge Base:
104581 Macro para cambiar el valor predeterminado *. XL * a *. * en el cuadro de
dilogo Abrir
Volver arriba | Enviar comentarios

Excel VBA Open File Dialog


MAR 11, 2014BY

AZUROUS IN 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 doesnt 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

dialog doesnt

printed

in

cell

A2.

Note

actually open any files, it

the path the user has selected:


Sub Example1()
Dim intChoice As Integer

that

theopen
only

file

returns

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 doesnt

actually open any files, it

returns the path the user has selected:


Sub Example2()
Dim intChoice As Integer
Dim strPath As String

only

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

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