65.9K
CodeProject 正在变化。 阅读更多。
Home

VBA 的文件浏览器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.79/5 (17投票s)

2001年10月15日

MIT

2分钟阅读

viewsIcon

278785

downloadIcon

6383

Excel 演示如何在 Office 应用程序中构建文件浏览器。

Sample Image - FileBrowse.gif

引言

这里是一个在 Office 应用程序中构建常用文件浏览器的示例。我不会解释所有使用的 Windows API 函数,因为这对于这篇文章来说太长了。我为 Excel 制作了这个程序,但你可以在所有支持 VBA 的应用程序中使用它。当你打开 Excel 文件并在 VBViewer (ALT+F11) 中查看整个项目时,你会看到主要工作是由名为 FileBrowser 的模块完成的。你可以导出它并将其导入到另一个项目。

代码说明

Declare Function th_apiGetOpenFileName Lib "comdlg32.dll" 
    Alias "GetOpenFileNameA" (OFN As thOPENFILENAME) As Boolean
Declare Function th_apiGetSaveFileName Lib "comdlg32.dll" 
    Alias "GetSaveFileNameA" (OFN As thOPENFILENAME) As Boolean
Declare Function CommDlgExtendetError Lib "commdlg32.dll" () As Long

GetOpenFileName 的功能是构建此界面的关键。有关这些函数的详细信息,请参阅 API 指南。注意:OFN 是允许你浏览文件的容器。

Function StartIt()
    Dim strFilter As String
    Dim lngFlags As Long
    strFilter = thAddFilterItem(strFilter, "Excel Files (*.xls)", "*.XLS")
    strFilter = thAddFilterItem(strFilter, "Text Files(*.txt)", "*.TXT")
    strFilter = thAddFilterItem(strFilter, "All Files (*.*)", "*.*")
    Startform.filenameinput.Value = thCommonFileOpenSave(InitialDir:=
        "C:\Windows", Filter:=strFilter, FilterIndex:=3, Flags:=lngFlags, 
        DialogTitle:="File Browser")
   Debug.Print Hex(lngFlags)
End Function

这是主函数。thAddFilterItems 显示在下拉菜单中,用于选择不同的文件类型。如果你想添加其他项目,例如 Word 文件 (*.doc),复制并粘贴该行并填写你想要的内容。重要的是 InitialDir,它指定开始浏览的路径。函数 thCommonFileOpenSave 控制对话框,并返回一个包含所选文件的 string。这个 string 被传递给 Startform 的文本框 filenameinput。因此,现在你有了控制权,可以在用户选择的窗体中处理文件。函数 thCommonFileOpenSave 看上去很复杂,但大多数时候它只是设置 OFN 对象的属性。

If OpenFile Then fResult = th_apiGetOpenFileName(OFN) 
Else fResult = th_apiGetSaveFileName(OFN)
If fResult Then
    If Not IsMissing(Flags) Then Flags = OFN.Flags
        thCommonFileOpenSave = TrimNull(OFN.strFile)
    Else
        thCommonFileOpenSave = vbNullString
End If

这是函数 thCommonFileOpenSave 的重要部分。第一行决定你想要保存或打开文件,并调用所需的函数。if 块语句定义了函数的返回值。它返回 OFN.strFile,它等于所选文件的名称,或者一个 null 字符串。函数 TrimNull 只是清除 Nullchars

我希望模块的其余代码清晰易懂,但请不要问我关于十六进制值设置的问题。我在 API 指南中找到了它,我不知道它具体做什么。另外,请不要批评我的糟糕英语。我是一名物理学学生,而不是语言天才。祝你玩得开心。

历史

  • 2001年10月14日:初始发布
  • 2008年10月3日:更新下载文件
© . All rights reserved.