在MS Access中未定义“FileDialog”类型

7
在Access 2016中,我想显示“文件打开”对话框,允许用户选择要导入的CSV文件。然而,在与行 Dim FD as Office.FileDialog 相关的情况下生成了一个错误-

编译错误:未定义的类型

以下代码已从MSDN上发布的示例中复制(并稍作编辑)。该示例被列为适用于Office 2013及更高版本,但是代码中的第一个注释(与变量类型 Office.FileDialog 有关)似乎与此相矛盾-

需要参考Microsoft Office 11.0对象库。

在Access 2016中肯定没有对Microsoft Office 11.0 Object Library的引用。但是,其中包含对 Microsoft Access 16.0 Object Library 的引用。
如何使文件打开对话框显示?
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

这是我当前选择的参考资料 -

选定的参考资料

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

可用的MS Office参考资料

3个回答

15

如果有人遇到同样的问题,您需要选择“Microsoft Office 16.0 Object Library”,而不是“Microsoft Access 16.0 Object Library”。


8

我不知道为什么可用的引用中没有显示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 运行该代码并选择多个文件时,SelectFile 将只包含最后一个文件。

1
谢谢,它有效。我猜这只是2016年的一些小问题!而且我知道你所说的关于多文件选择的意思。我想我会删除该选项并默认设置为“false”,因为在这种情况下不需要它(我只是试图提前计划一下)。 - David Gard
1
问题只是推迟到下一行:Application.FileDialog。此外,FD不是Office.FileDialog,而是Application.FileDialog。您只需要在项目中添加Microsoft Office x.0对象库即可。 - Mike

0
在 Office 2016 中,"Microsoft Office 16.0 Object Library" 在引用窗口中已经不存在了。 我遇到的主要问题是确定 dll 文件的位置和名称。
最终我找到了完整的文件路径,我想这对任何用户来说都是相同的,因为我认为它是一个默认目录:
"C:\Program Files\Microsoft Office\Root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.dll"
我花了1个小时才找到这个路径,只是为了创建文件对话框!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接