Access & VBA FAQ
| | | |
Indice de temas
Tablas
Consultas
Formularios
Informes
Macros
Módulos
Base de datos
Miscelánea
API
Utilidades
Problemas
Cadenas
Fechas
Todos los temas
Utilidades : FileDialog
Autor/es:
Juan M Afán de Ribera
Pregunta : ¿Cómo puedo hacer para mostrar un cuadro de diálogo en el cual el usuario escoja un archivo?
Respuesta : Si trabajas con la versión de Access XP o superior tienes disponible un objeto llamado FileDialog que sirve para tal propósito y que pertenece a la librería de objetos de Microsoft Office. Consulta en la ayuda por FileDialog.

Si en cambio estás trabajando con Access 97 o Access 2000 no tienes tal objeto. Puedes entonces utilizar el API de Windows para abrir cuadros de diálogo. En este enlace tienes un ejemplo de cómo implementarlo.

Otra alternativa es utilizar el objeto FileDialog que he construído y que emula practicamente en todo al FileDialog de Access XP o superior (y además tiene un método extra "Execute" que sólo funciona para Word o Excel - aunque en esas aplicaciones de Office lo hace de otra forma).

Propiedades

PropiedadDescripción
AllowMultiselectValor de tipo boolean que Indica si el cuadro de diálogo permitirá seleccionar más de un archivo. Esta propiedad únicamente funcionará en el modo Abrir archivo (propiedad DialogType = DialogOpen)

- True: Podrá ser seleccionado más de un archivo
- False: (Predeterminado) sólo podrá ser seleccionado un archivo
ButtonNameValor de tipo string que indica el texto que aparecerá en el botón Abrir o Guardar. De manera predeterminada y si no se indica nada en esta propiedad el botón mostrará el texto que corresponda con cada tipo de cuadro de diálogo.
DialogTypeDetermina el tipo de cuadro de diálogo que se mostrará

- DialogOpen: Abrir archivo (predeterminado si no se indica ningún otro)
- DialogSaveAs: Guardar archivo
- DialogFolderPicker: Escoger carpeta
FiltersValor de tipo string que determina los tipos de archivos que podrán ser seleccionados. La sintaxis para esta propiedad tiene la siguiente estructura:

    [descripción](extensión de tipos de archivos)

Los tipos de archivos se han de encerrar entre paréntesis y, en caso de que haya más de uno, se separarán con puntos y comas ";"

Ejemplos:

Este filtro mostrará todos los tipos de archivos
FileDialog.Add "Todos los archivos(*.*)"

Este filtro mostrará diferentes archivos de MsAccess
FileDialog.Add "Archivos de Access(*.mdb;*.mde;*.adp;*.ade)"

Este filtro mostrará diversos archivos de imagen
FileDialog.Add "Archivos de imagen(*.bmp;*.jpg;*.gif;*.ico;*.wmf)"

Si no se especificara ningún filtro, el cuadro de diálogo mostrará todos los tipos de archivos.

Al ser esta una propiedad de tipo colección, funcionará a través de los métodos estandar de cualquier objeto colección:

- Add (agregar un elemento a la colección)
- Count (devuelve el número de elementos en la colección)
- Item (devuelve/establece un elemento)
- Remove (elimina un elemento de la colección)
FilterIndexValor de tipo Long que determina cuál de los filtros de archivos aparecerá al iniciarse el diálogo. Si no se especifica ninguno se mostrará siempre el primer filtro.
InitialFileNameValor de tipo string que determina el nombre y ruta (opcional) del archivo o carpeta que se mostrará al iniciarse el diálogo. Este valor, si se especifica, prevalecerá sobre el valor que contenga la propiedad Filters. Si sólo se especifica el nombre de archivo (sin su ruta), el diálogo buscará ese archivo en la carpeta por defecto. Si no se especifica nada, se mostrarán los archivos referidos en la propiedad Filters, en la carpeta predeterminada del diálogo
InitialViewDetermina el tipo de vista que mostrará el cuadro de diálogo

- ViewList: Lista (predeterminado)
- ViewDetails: Detalles
- ViewPreview: Vista previa
- ViewProperties: Propiedades
SelectedItemsColección que contendrá el número de archivos seleccionados (Count), así como las rutas completas de cada uno de ellos. En el caso de que no se haya indicado nada en la propiedad AllowMultiselect o de que ésta esté a False, bastará con referirnos al primer elemento de la colección para conocer la ruta del archivo seleccionado. Por ejemplo:

    ArchivoSeleccionado = FileDialog.SelectedItems(1)
TitleValor de tipo string que determina el título que mostrará el cuadro de diálogo. Si no se especifica esta propiedad, el cuadro de diálogo mostrará el título que corresponda por defecto al tipo de diálogo seleccionado

Métodos

MétodoDescripción
ExecuteAbre los archivos o documentos seleccionados cuando el cuadro de diálogo sea del tipo Abrir archivo (DialogOpen). Este método no funcionará con otro tipo de diálogo.

Internamente, lo que hace es recorrer la colección SelectedItems, y abrir los archivos almacenados en esa propiedad, mostrando un mensaje de error si por alguna razón no es posible abrir alguno de esos archivos.

Es capaz de abrir cualquier archivo o programa ejecutable, así como cualquier tipo de documento que esté registrado en el sistema.
ShowMuestra el cuadro de diálogo con las propiedades elegidas.

Este método devuelve -1 si el usuario ha seleccionado algún archivo o carpeta, en caso contrario, devuelve 0.

Para intentar acceder a la colección SelectedItems, en donde se guarda/n el/los nombre/s de el/los archivo/s seleccionado/s primero se debería preguntar por el valor devuelto por este método, ya que en caso de que el usuario no hubiera seleccionado ningún fichero o carpeta, el hecho de referirnos a una colección (SelectedItems) que no tiene elementos provocará un error. Esta sería una forma correcta de llamar a este método

    If FileDialog.Show Then
        MsgBox FileDialog.SelectedItems(1)
    Else
        MsgBox "No se ha seleccionado ningún archivo"
    End If
Este ejemplo mostrará el cuadro de diálogo abrir archivo, seleccionando diversos tipos de ficheros de imagen, con la vista "Vista previa":
Dim FileDlg As FileDialog

    Set FileDlg = New FileDialog
    
    With FileDlg
        .DialogType = DialogOpen
        .InitialView = ViewPreview
        .Filters.Add "Archivos de imagen(*.bmp;*.jpg;*.gif;*.ico;*.wmf)"
        
        If .Show Then
            MsgBox "Archivo seleccionado: " & .SelectedItems(1)
        Else
            MsgBox "No se ha seleccionado ningún archivo"
        End If
    End With
    
    Set FileDlg = Nothing
Este otro ejemplo ilustra cómo recorrer la colección SelectedItems en busca de los diferentes archivos seleccionados, cuando la propiedad AllowMultiselect esté puesta a True:
Dim FileDlg As FileDialog
Dim Archivo As Variant
Dim Archivos As String

    Set FileDlg = New FileDialog
    
    With FileDlg
        .DialogType = DialogOpen
        .InitialView = ViewPreview
        .AllowMultiSelect = True
        .Filters.Add "Archivos de imagen(*.bmp;*.jpg;*.gif;*.ico;*.wmf)"
        
        If .Show Then
            Archivos = "Archivos seleccionados: " & vbCrLf
            For Each Archivo In .SelectedItems
                Archivos = Archivos & vbCrLf & Archivo
            Next
            MsgBox Archivos
        Else
            MsgBox "No se ha seleccionado ningún archivo"
        End If
    End With
    
    Set FileDlg = Nothing
Para un correcto funcionamiento, hay que copiar el módulo de clase FileDialog y el módulo estandar Constantes (este último sólo para la versión de Access 97) que aparecen en las bases de la sección Ejemplos, y pegarlos en vuestra aplicación, sin variar el nombre del módulo FileDialog.

Ejemplos:

FileDlg Access 2000 o superior

FileDlg97 Access 97

 

Temas relacionados:

 

Última actualización: 26/12/2004