33
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 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 Workbooks

Macros Excel Vba

Embed Size (px)

DESCRIPTION

macros

Citation preview

Page 1: Macros Excel Vba

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.

Page 2: Macros Excel Vba

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.

Page 3: Macros Excel Vba

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 &#... »

Page 4: Macros Excel Vba

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

Page 5: Macros Excel Vba

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

Page 6: Macros Excel Vba

'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

Page 7: Macros Excel Vba

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

Page 8: Macros Excel Vba

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

Page 9: Macros Excel Vba

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.

Page 10: Macros Excel Vba

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

Page 11: Macros Excel Vba

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?

Page 12: Macros Excel Vba

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

Page 13: Macros Excel Vba

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

Page 14: Macros Excel Vba

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.

Page 15: Macros Excel Vba

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.

Page 16: Macros Excel Vba

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?()")

Page 17: Macros Excel Vba

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

Page 18: Macros Excel Vba

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:

Page 19: Macros Excel Vba

After selecting the file “test.txt” from the directory “D:Temp”,

the path is printed in cell A2:

Page 20: Macros Excel Vba

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 

Page 21: Macros Excel Vba

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:

Page 22: Macros Excel Vba

After selecting the 3 files, “Test1.txt”, “Test2.txt” and “Test3.txt”

from the folder “D:Temp” their paths are printed in Column A:

Page 23: Macros Excel Vba

-

Custom Title:

By default the title of the Open File Dialog is “Open File”:

Page 24: Macros Excel Vba

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 

Page 25: Macros Excel Vba

'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:

-

Page 26: Macros Excel Vba

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:

Page 27: Macros Excel Vba

-

Filter File Types, Filters: In the example below there are multiple file types in our

folder, .txt, .xlsx, .docx:

Page 28: Macros Excel Vba

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:

Page 29: Macros Excel Vba

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

Page 30: Macros Excel Vba