'FileDialog' 类型未在 MS Access 中定义

'FileDialog' type is not defined in MS Access

在 Access 2016 中,我希望显示 打开文件 对话框,允许用户 select 导入 CSV 文件。但是,正在生成与行 Dim FD as Office.FileDialog -

有关的错误

Compile error: User-defined type not defined

以下代码是从 the example posted on MSDN 复制(并稍作编辑)的。此示例被列为与 Office 2013 及更高版本相关,但代码中的第一条注释(与变量类型 Office.FileDialog 相关)似乎与此相矛盾 -

Requires reference to Microsoft Office 11.0 Object Library.

当然,对于 Office 2013,您需要引用 MS Office 15 对象库,然后是未来版本(例如 2016)的相应版本库?

但无论如何,在 Access 2016 中没有对 Microsoft Office 11.0 对象库的引用。但是,其中包含对 Microsoft Access 16.0 对象库 的引用。

如何显示 打开文件 对话框?

Function SelectFile(Optional ByVal title As String = "Please select a file", _
                    Optional ByVal allowMultiSelect As Boolean = False) As Variant

    Dim FD As Office.FileDialog
    Dim file As Variant

    Set FD = Application.FileDialog(msoFileDialogFilePicker)

    With FD

        .title = "Please select a file"         ' Add the dialog title
        .allowMultiSelect = allowMultiSelect    ' Set whether or not to allow multiple file selection

        .filters.Clear                      ' Clear any existing filters
        .filters.Add "CSV Files", "*.csv"   ' Add new filters

        '**
         ' Show the dialog to the user
         '*
        If .Show = True Then

            For Each file In .selectedItems  ' Grab the path/name of the selected file
                SelectFile = file
            Next

        Else
            SelectFile False
        End If

   End With

   Set FD = Nothing    ' Clean up the FD variable

End Function

这是我目前 select 编辑的参考文献 -

这里是可用的 MS Office 参考资料(没有参考 Microsoft Office 16.0 对象库)-

我不知道为什么 Microsoft Office [版本] 对象库 没有显示在可用的参考资料中。但是,如果切换到后期绑定,则不需要它。

Const msoFileDialogFilePicker As Long = 3
'Dim FD As Office.FileDialog
Dim FD As Object
Dim file As Variant
Set FD = Application.FileDialog(msoFileDialogFilePicker)

稍后,您需要决定在这里做什么...

For Each file In .selectedItems  ' Grab the path/name of the selected file
    SelectFile = file
Next

当您 运行 使用 AllowMultiSelect = True、 和 select 多个文件的代码时,SelectFile 将仅包含最后一个文件.

对于遇到相同问题的任何人,您需要 select 与 'Microsoft Access 16.0 Object Library'

不同的 'Microsoft Office 16.0 Object Library'

在 office 2016 中,参考 window 中缺少 "Microsoft Office 16.0 Object Library"。 我遇到的主要问题是确定 dll 文件的位置和名称。

我终于找到了完整的文件路径,我想这对任何用户来说都是一样的,因为我相信它是默认目录:

"C:\Program Files\Microsoft Office\Root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.dll"

为了创建文件对话框,我花了 1 小时找到这条路径!