使用FileDialog对象选择文件或文件夹

总览

通常需要提示Access项目的操作员选择文件或文件夹。 当然,可以允许他们徒手键入它,甚至可以将其粘贴到另一个应用程序中,但是通常,操作员比大多数Windows应用程序(带有文件)更容易从现有文件结构中选择它/文件夹选择窗口)。

这是完全可以在Access中完成的(当然,也可以是任何MS Office应用程序,但是为了简单起见,我们将在此处处理Access)。 做什么和如何做的细节可以在下面找到。 在本文的附件中,您可以找到一个示例数据库,其中包括所有已实现的数据库。 也有一个相关的视频

VBA提示:在Access(cc)中使用FileDialog选择文件或文件夹对象

一个对象是必要的。 要实施此功能,请使用

MS Office对象库中的FileDialog对象。 这就要求将库包含为项目的参考。 如果在“ 工具 \ 引用”列表(在VBA IDE或“代码编辑器”窗口中)中未找到它,则使用同一命令选择它。 版本有所不同,但全名可能类似于“ Microsoft Office XX.X对象库 ”。 您可能需要向下滚动很长一段距离才能找到它,但是列表中的大多数项目都是按字母顺序排列的。 文件或文件夹

选择文件和选择文件夹非常相似,但是为了清楚起见,这里我将介绍它们的区别。

选择文件时,操作员可以选择任何一种文件夹(从

N:下拉或在文件/当前文件夹中的文件夹中列出的主要部分),它会继续导航到该文件夹。 仅在选择文件后才返回值。

但是,在选择文件夹时,仍然可以使用

下拉菜单,甚至双击主要部分的文件夹。 要将文件夹恢复为调用代码,必须使用从主要部分中选择的特定文件夹激活“确定”按钮。 示例数据库

为了说明此方法的用法,我将使用一个包含两个用于选择的控件的表单来建立一个简单的数据库:

  1. 一个文件夹。
  2. 一份文件。

由于我不想对任何人的文件做任何事情,因此有效负载将只是通过命令按钮在相关标签中显示文件夹或文件的完整路径。

示例数据库的结构和对象

实际上,这几乎没有什么(请看下面的图片)。

  1. 一个名为frmFileDialog的窗体,除了标题标签,退出按钮及其关联的标签,两个名为cmdFoldercmdFile的命令按钮以及每个标签的关联标签( lblFolderlblFile ,上面还有一个表单
  2. 与表单关联的模块,其中包含支持各种控件的VBA代码。
  3. 另一个模块modMain ,仅包含FSBrowse()的代码。

VBA代码

让我们从一个例程开始,该例程提供一个使用此对象的简单接口。 我叫它

FSBrowse ,这是一个功能过程。
Option Compare Database
Option Explicit 
'FSBrowse (File System Browse) allows the operator to browse for a file/folder.
'  strStart specifies where the process should start the browser.
'  lngType specifies the MsoFileDialogType to use.
'  strPattern specifies which FileType(s) should be included.
Public Function FSBrowse(Optional strStart As String = "", _
                         Optional lngType As MsoFileDialogType = _
                             msoFileDialogFolderPicker, _
                         Optional strPattern As String = "All Files,*.*" _
                         ) As String
    Dim varEntry As Variant 
    FSBrowse = ""
    With Application.FileDialog(dialogType:=lngType)
        'Set the title to match the type used from the list
        .Title = "Browse for "
        Select Case lngType
        Case msoFileDialogOpen
            .Title = .Title & "File to open"
        Case msoFileDialogSaveAs
            .Title = .Title & "File to SaveAs"
        Case msoFileDialogFilePicker
            .Title = .Title & "File"
        Case msoFileDialogFolderPicker
            .Title = .Title & "Folder"
        End Select
        If lngType <> msoFileDialogFolderPicker Then
            'Reset then add filter patterns separated by tildes (~) where
            '  multiple extensions are separated by semi-colons (;) and the 
            '  description is separated from them by a comma (,).
            '  Example strPattern :
            '  "MS Access,*.ACCDB; *.MDB~MS Excel,*.XLSX; *.XLSM; *.XLS"
            Call .Filters.Clear
            For Each varEntry In Split(strPattern, "~")
                Call .Filters.Add(Description:=Split(varEntry, ",")(0), _
                                  Extensions:=Split(varEntry, ",")(1))
            Next varEntry
        End If
        'Set some default settings
        .InitialFileName = strStart
        .AllowMultiSelect = False
        .InitialView = msoFileDialogViewDetails
        'Only return a value from the FileDialog if not cancelled.
        If .Show Then FSBrowse = .SelectedItems(1)
    End With
End Function
这个程序允许一个相当简单的接口,如果任何选择返回选定的项目,而是一个空字符串,否则。 它还具有说明该对象通常使用的某些属性的好处。

接下来是调用上述函数的表单后面的代码。 由于复杂性级别是如此基础,因此几乎不需要解释,但是无论如何,我将在代码下面包含一些指针。

Option Compare Database
Option Explicit 
Private Sub Form_Open(Cancel As Integer)
    Call DoCmd.Restore
    With Me
        .lblFolder.Caption = Replace(CurrentProject.Path & "\", "\\", "\")
        .lblFile.Caption = CurrentProject.FullName
    End With
End Sub 
Private Sub cmdFolder_Click()
    Dim strPath As String 
    With Me
        strPath = FSBrowse(strStart:=.lblFolder.Caption, _
                           lngType:=msoFileDialogFolderPicker)
        If strPath > "" Then _
            .lblFolder.Caption = Replace(strPath & "\", "\\", "\")
    End With
End Sub 
Private Sub cmdFile_Click()
    Dim strPath As String 
    With Me
        strPath = Left(.lblFile.Caption, InStrRev(.lblFile.Caption, "\"))
        strPath = FSBrowse(strStart:=strPath, _
                           lngType:=msoFileDialogFilePicker, _
                           strPattern:="MS Access Databases,*.ACCDB; *.MDB~" & _
                                       "All Files,*.*")
        If strPath > "" Then .lblFile.Caption = strPath
    End With
End Sub 
Private Sub cmdExit_Click()
    Call DoCmd.Close
End Sub
  • 第4行-#10 Form_Open()
    这将还原表单(以最大化或最小化形式)。
    它还设置了同时显示文件夹(第7行)和文件(第8行)的标签的起始值。 这些值分别与当前项目的文件夹和全名值匹配。 IE浏览器 打开的数据库名为
    请注意,只需要对文件夹使用Replace() ,因为可以使用或不使用斜杠(/)字符来返回文件夹地址。 此代码确保仅当已经不存在时才添加一个。
  • 第12行-#21 cmdFolder_Click()
    第13-#15和#20-#21行只是简单地设置了代码结构,实际上并没有做任何特定的事情。
    第16-17行调用了上面显示的FSBrowse函数。 strStart参数告诉它从哪里开始浏览。 在这种情况下,它与最初在Form_Open()中设置的相同,或者如果它以前已运行过,则最后返回的值是相同的。 lngType参数告诉它寻找一个文件夹。
    如果未取消FileDialog,则第18行至第19行仅将返回值保存在标签的Caption中。 请注意,它还在末尾添加了反斜杠(\),但前提是还没有反斜杠(\)。
  • 第23行-#34 cmdFile_Click()
    #23-#26和#33-#34行只是设置了代码结构,实际上没有做任何特定的事情。
    第27行设置了起始地址。 它确保删除文件名部分,否则将过滤可见文件以仅匹配该名称。 本质上,它将值设置为仅与标签的Caption最后返回的值匹配的文件夹部分。
    第28-31行调用上面显示的FSBrowse函数。 strStart参数告诉它从哪里开始浏览。 在这种情况下,它是由第27行设置的。 lngType参数告诉它查找文件。 strPattern参数指定可使用哪些过滤器。
  • 36-38cmdExit_Click()
    第37行只是关闭当前对象即表单。
结论

实际上,这是一件非常容易完成的事情,可以轻松地整合到任何数据库中。 一旦了解了基础知识,就没有理由不应该在需要这种工具的任何地方使用它。

附加图片
文件类型:jpg FileDialog.jpg (26.0 KB,46855视图)
附加的文件
文件类型:zip FileDialog.Zip (105.6 KB,7637视图)

From: https://bytes.com/topic/access/insights/916710-select-file-folder-using-filedialog-object

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值