VBA 对话阻止用户更改扩展名 FileFilter 选项

Posted

技术标签:

【中文标题】VBA 对话阻止用户更改扩展名 FileFilter 选项【英文标题】:VBA Dialogue prevent user from changing extension FileFilter option 【发布时间】:2014-02-14 21:48:38 【问题描述】:

假设我有一个包含多种文件类型的目录,并且我已经将文件过滤器设置为仅显示 CSV 文件

paths = Application.GetOpenFilename("Comma Separated Values (*.csv),*.csv", _
MultiSelect:=True)

上面的代码确实正确地应用了过滤器。

现在,当我在文件名编辑框中输入任何过滤器文本并点击打开/输入时,文件扩展名过滤器不再起作用/被重置为用户的过滤器。

这意味着如果我在同一目录中有名为 test.doctest.csv 的文件并在打开文件对话框编辑框中键入 test*,则 Word 文档和 CSV 文件都将显示为可选择的。

这是一个错误吗?有没有办法解决这个问题?也就是说,我希望用户定义的过滤器成为预定义过滤器的补充

【问题讨论】:

将其称为错误或功能,但它在使用 Windows 文件对话框的任何事物中都很常见,而不仅仅是 Office/VBA。我认为您可以解决它的唯一方法是从头开始编写自己的文件选择器...... 恐怕我不得不把它当作一个错误来对待 - 用户可能会无意中选择文件类型错误的文件并导致代码错误,除非考虑到这一点,这就是设置过滤器的原因首先。谢谢,只是想知道这是否是预期的行为。 【参考方案1】:

我想我明白你在问什么。我知道我把这个放在某个地方。

这是没有多选的:

fileOpen = Application.GetOpenFilename("Text Files (*.csv),*.csv,Word Files (*.doc),*.doc")

这是多选加标题:

fileOpen = Application.GetOpenFilename("Text Files (*.csv),*.csv,Word Files (*.doc),*.doc", 1, "Pick Your CSV File", , True)

希望有帮助!

【讨论】:

我想你可能误解了我的意思——我会尽量解释清楚一点。使用 Windows 文件对话框时,例如在记事本中打开文件,浏览到具有多种文件类型的文件夹。现在输入“*”。所有文件都显示出来了,原来的 *.txt 过滤器现在被忽略了,但它仍然显示为处于活动状态。我希望在 VBA 中使用 Windows 文件对话框时找到一个不允许重置过滤器的解决方案。

以上是关于VBA 对话阻止用户更改扩展名 FileFilter 选项的主要内容,如果未能解决你的问题,请参考以下文章

使用 MS Access VBA 更改标签的默认标题

(保存对话框)如何在 Vista/Win7 中更改文件过滤器时自动更改文件扩展名?

VBA Excel 在文本框中提供当前日期

扩展库中的不可关闭对话框

在 Lync IM 对话中解析文本?

阻止通知电子邮件上的Gmail线程对话