问题
I've looked quite intensely, but couldn't find a post that directly solves my problem.
The following code for a form I created works in Access 2003, which I use at work.
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
However, when I tried to run the same code on a form in Access 2010 on my personal computer, it doesn't work.The error message highlights the first line and says "User-defined type not defined." I also tried declaring FileName as Office.FileDialog, but no luck either. I do have Microsoft Access 14.0 Object Library as one of the references in use, so I don't know what's wrong with that.
I've only been using Access for two weeks, and all my knowledge come from googling, so it's very likely that I'm missing something obvious.
回答1:
The FileDialog object is not provided by the Access library, but by the Office library.  So your code should work if you set a reference to the Microsoft Office [version number] Object Library.  Either you don't have that reference set, or it's broken.
However if it were me, I would leave the reference unset and modify the code like this. See if it works for you.
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
    回答2:
In tools, references..., you have to select "Microsoft Office 14.0 Object Library" instead of the Microsoft Access one.
来源:https://stackoverflow.com/questions/9476268/filedialog-doesnt-work