Application.FileDialog vs GetOpenFilename:有啥区别?

Posted

技术标签:

【中文标题】Application.FileDialog vs GetOpenFilename:有啥区别?【英文标题】:Application.FileDialog vs GetOpenFilename: What is the difference?Application.FileDialog vs GetOpenFilename:有什么区别? 【发布时间】:2016-12-31 11:04:03 【问题描述】:

我正在尝试在短暂的假期期间自学 VBA。 对于我的第一个模块,我想创建一个执行以下操作的模块:

    显示对话框。提示用户选择 CSV 文件。 通过循环打开 CSV 文件。 根据数据汇总 CSV 文件。

无论如何,对于number1,我在网上的例子中搜索并找到了两种方法: Application.FileDialog 和 GetOpenFilename。嗯,我想知道,两者之间有什么区别(限制、功能、速度等)。一种方法比另一种方法有显着优势吗?

谢谢。

【问题讨论】:

【参考方案1】:

Application.FileDialog 是为您提供多种类型的标准文件对话框的综合属性:(1)文件选择器,(2)文件夹选择器,(3)打开文件对话框和(4)“另存为”对话框。获取 FileDialog 对象后,您可以进一步对其进行自定义并调用Show()(在某些情况下后跟Execute())来显示它并获取用户操作。

Application.GetOpenFilename 方法显示用于获取文件名的对话框(另见上面的案例 1、3、4),允许您快速预设选定的一组属性,即 文件过滤器、初始文件过滤器索引、对话框标题、操作按钮文本(例如“打开”或“保存”)和选项,是否可以一次选择多个文件(多选)。但是您无法控制这些预设。

因此,基本上前者让您可以更好地控制对话窗口,而后者在标准简单的一次性场景中采用“更快”。

坚持使用快速方法,您可能更喜欢GetOpenFilename(),但如果您希望为更大的应用程序创建库,例如始终使用带有一些自定义标准的 fie 对话框(自定义文件过滤器或自定义窗口自定义标题)您的应用程序),您可能更喜欢根据您的标准调整 FileDialog 并显示它的自定义方法。

另外请注意,上述两种方法都会为您提供为 Microsoft Office 定制的对话框。通过谷歌搜索,您可以找到使用 Microsoft Windows 标准对话框的方法,for example folder picker dialog。

【讨论】:

【参考方案2】:

Application.FileDialog 是一个对象。 GetOpenFilename 是一个属性。如果您调用GetOpenFilename,Excel 将拥有对话框对象,对其进行配置、显示并为您提供返回值。如果你使用Application.FileDialog配置它,显示它,并从对象中获取返回值。除此之外,它们完全相同 - 只是谁拥有和控制底层 FileDialog 的问题。

【讨论】:

FileDialog 是 Application 的一个属性,它返回一个 FileDialog 对象。 GetOpenFilename 是一种显示标准打开对话框的应用程序方法。 GetOpenFilename 仅适用于 Excel。

以上是关于Application.FileDialog vs GetOpenFilename:有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

VBA 浏览和选择

VBA7种文档遍历法

使用 VBA 将文件夹导入 Excel (FileDialogFolderPicker)

word vba 插入图片

在 Access 中通过 VBA 传输表时出错

批量导入图片到word并添加文件名