通常需要提示Access项目的操作员选择文件或文件夹。 当然,可以允许他们徒手键入它,甚至可以将其粘贴到另一个应用程序中,但是通常,操作员比大多数Windows应用程序(带有文件)更容易从现有文件结构中选择它/文件夹选择窗口)。
这是完全可以在Access中完成的(当然,也可以是任何MS Office应用程序,但是为了简单起见,我们将在此处处理Access)。 做什么和如何做的细节可以在下面找到。 在本文的附件中,您可以找到一个示例数据库,其中包括所有已实现的数据库。 也有一个相关的视频
VBA提示:在Access(cc)中使用FileDialog选择文件或文件夹 。 对象一个对象是必要的。 要实施此功能,请使用
MS Office对象库中的 FileDialog对象。 这就要求将库包含为项目的参考。 如果在“ 工具 \ 引用”列表(在VBA IDE或“代码编辑器”窗口中)中未找到它,则使用同一命令选择它。 版本有所不同,但全名可能类似于“ Microsoft Office XX.X对象库 ”。 您可能需要向下滚动很长一段距离才能找到它,但是列表中的 大多数项目都是按字母顺序排列的。 文件或文件夹选择文件和选择文件夹非常相似,但是为了清楚起见,这里我将介绍它们的区别。
选择文件时,操作员可以选择任何一种文件夹(从
看我 N:下拉或在文件/当前文件夹中的文件夹中列出的主要部分),它会继续导航到该文件夹。 仅在选择文件后才返回值。但是,在选择文件夹时,仍然可以使用
看我 :下拉菜单,甚至双击主要部分的文件夹。 要将文件夹恢复为调用代码,必须使用从主要部分中选择的特定文件夹激活“确定”按钮。 示例数据库为了说明此方法的用法,我将使用一个包含两个用于选择的控件的表单来建立一个简单的数据库:
由于我不想对任何人的文件做任何事情,因此有效负载将只是通过命令按钮在相关标签中显示文件夹或文件的完整路径。
示例数据库的结构和对象实际上,这几乎没有什么(请看下面的图片)。
让我们从一个例程开始,该例程提供一个使用此对象的简单接口。 我叫它
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
实际上,这是一件非常容易完成的事情,可以轻松地整合到任何数据库中。 一旦了解了基础知识,就没有理由不应该在需要这种工具的任何地方使用它。
FileDialog.jpg (26.0 KB,46855视图) |
FileDialog.Zip (105.6 KB,7637视图) |
From: https://bytes.com/topic/access/insights/916710-select-file-folder-using-filedialog-object