MS Access中未定义“FileDialog”类型

时间:2016-02-22 14:39:04

标签: vba ms-access access-vba office-2016

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

相关的错误正在生成
  

编译错误:未定义用户定义的类型

以下代码已从the example posted on MSDN复制(并稍加编辑)。此示例被列为与Office 2013及更高版本相关,但代码中的第一个注释(与变量类型 Office.FileDialog 相关)似乎对此进行了谴责 -

  

需要引用Microsoft Office 11.0对象库。

对于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

以下是我目前选择的参考资料 -

Selected references

以下是可用的MS Office referencs(没有参考 Microsoft Office 16.0对象库) -

Available MS Office references

3 个答案:

答案 0 :(得分:7)

对于遇到相同问题的任何人,您需要选择' Microsoft Office 16.0对象库'与Microsoft 访问 16.0对象库'

不同

答案 1 :(得分:5)

我不知道为什么 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将仅包含最后一个文件。

答案 2 :(得分:0)

在办公室2016中,引用窗口中缺少“Microsoft Office 16.0对象库”。 我遇到的主要问题是确定dll文件的位置和名称。

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

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

我花了1个小时才找到这条路径,所以我可以创建文件对话框!