2012-02-28 9 views
7

He buscado bastante intensamente, pero no he podido encontrar una publicación que resuelva directamente mi problema.FileDialog no funciona

El siguiente código para un formulario que creé funciona en Access 2003, que uso en el trabajo.

Dim FileName As FileDialog 
Set FileName = Application.FileDialog(msoFileDialogFilePicker) 
Dim Name As Variant 

With FileName 
    .AllowMultiSelect = False 
    .Show 
    If .SelectedItems.Count = 0 Then 
    MsgBox "No file selected." 
    Exit Sub 
    End If 
End With 

For Each Name In FileName.SelectedItems 
FileNameTextBox.Text = Mid$(Name, InStrRev(Name, "\") + 1) 
Next Name 

Sin embargo, cuando traté de ejecutar el mismo código en un formulario de Access 2010 en mi ordenador personal, que no work.The mensaje de error destaca la primera línea y dice "tipo definido por el usuario no definido " También traté de declarar FileName as Office.FileDialog, pero tampoco tuve suerte. Tengo Microsoft Access 14.0 Object Library como una de las referencias en uso, así que no sé qué hay de malo en eso.

Solo he estado usando Access durante dos semanas, y todo mi conocimiento proviene de googlear, por lo que es muy probable que me esté perdiendo algo obvio.

+0

¿Cómo se hace para que toda la ruta del archivo se inserte en el cuadro de texto? – Jim

Respuesta

17

El objeto FileDialog no lo proporciona la biblioteca de Access, sino la biblioteca de Office. Por lo tanto, su código debería funcionar si establece una referencia a la biblioteca de objetos de Microsoft Office [número de versión]. O no tienes ese conjunto de referencia, o está roto.

Sin embargo, si fuera yo, dejaría la referencia sin configurar y modificaría el código de esta manera. Mira si te funciona.

Const msoFileDialogFilePicker As Long = 3 
Dim objDialog As Object 

Set objDialog = Application.FileDialog(msoFileDialogFilePicker) 

With objDialog 
    .AllowMultiSelect = False 
    .Show 
    If .SelectedItems.Count = 0 Then 
     MsgBox "No file selected." 
    Else 
     Me.FileNameTextBox.Value = Dir(.SelectedItems(1)) 
    End If 
End With 
+0

¡Está trabajando ahora! ¡¡Muchas gracias!! Aunque todavía estoy desconcertado por qué no funcionó antes porque tenía la biblioteca de objetos 14.0 en uso. – Emily

0

En herramientas, referencias ..., tiene que seleccionar "Microsoft Oficina Biblioteca 14.0 Objeto" en lugar de la de Microsoft Access.