如何在 transferText 命令中添加“浏览文件”对话框?

Posted

技术标签:

【中文标题】如何在 transferText 命令中添加“浏览文件”对话框?【英文标题】:How do I add a "browse for file" dialog box to the transferText command? 【发布时间】:2009-12-21 18:34:41 【问题描述】:

我正在 MS Access 中创建一个将 CSV 文件导入表的宏。我正在使用 TransferText 操作导入 CSV 字符串,并且我希望允许用户浏览包含 CSV 字符串的文件。 如何显示“浏览”对话框以使用户能够选择文件?

【问题讨论】:

这几乎是***.com/questions/1091484/…的复制品 我在工作中使用 Access 2002 (XP),我做的第一件事就是购买了 Access 2002 开发人员手册。有些人认为它是 Access 编程的“圣经”:amazon.com/Access-2002-Desktop-Developers-Handbook/dp/…。它包含大量示例代码。事实上,Tony Toews 指向的链接来自该书的一位作者,但该书更好地解释了如何使用它。 【参考方案1】:

见API: Call the standard Windows File Open/Save dialog box。但是,这需要 VBA 代码。

【讨论】:

【参考方案2】:

另一种选择(我会说这是@Tony Toews 和@draice 推荐的API 调用的第二选择)是使用Application.FileDialog 对象。只要 VBA 在 Access 中,这一直是 Office 自动化库的一部分,但在 Access 的最新版本中(从 A2002 或 A2003 开始​​,我不知道是哪个),*** Access 应用程序提供了一个此对象的包装器。但请注意,如果没有对 Office 自动化库的引用,Intellisense 中显示的 ENUM 值将无法在没有引用的情况下使用(有用的错误消息会通知您这一点并提供创建引用)。简而言之,如果您使用它,最好像使用任何具有后期绑定的自动化对象一样使用它,但您不必使用 Application.CreateObject 初始化***对象,因为它已经在那里供您使用.

编辑:

@draice 问:

我不明白以下内容 你写的声明:“ ***访问应用程序有 为这个对象提供了一个包装器” “最好像你一样使用它 具有后期绑定的自动化对象"

    Tony 的 API 代码可以在每个版本的 Windows 中运行,并且由于 MS 相信向后兼容性,他们永远不会在未来的 Windows 版本中破坏这个 API 调用。

    FileDialog 对象在 VBA 中不容易使用,除非您添加对 Office 自动化库的引用。最好尽量减少 Access 数据库中的引用数量,因为各种各样的事情都会弄乱它们并导致您的应用程序崩溃(任何缺少的引用都会阻止所有 VBA 代码运行)。为了避免缺少引用的问题,我们使用后期绑定,这样您编写的代码就不会依赖于外部库。

    Microsoft 可能会从未来版本的 Access 中删除此对象。 FileSearch 对象是一种类似的情况,因为它是在 A95/97 中作为 Office 自动化库的一部分引入的,然后在 A2000 中创建了围绕它的包装器,但 Microsoft 在 A2007 中将其删除(并且根本没有提供替代方案) . MS 可以选择在 Access 的未来版本中删除 FileDialog 对象,然后您的代码就会中断。但 API 调用永远不会中断。

【讨论】:

感谢您的回答!但是,我是一名编程和 MS Access 新手,所以我发现您的部分答案非常令人困惑。为什么它是“API 调用的第二选择”?从我初学者的角度来看,Application.FileDialog 似乎要简单得多。另外,我不明白您写的以下语句:“***访问应用程序为此对象提供了一个包装器”“最好像使用任何具有后期绑定的自动化对象一样使用它”【参考方案3】:

可以在http://www.access-programmers.co.uk/forums/showthread.php?p=917371#post917371找到答案。

【讨论】:

以上是关于如何在 transferText 命令中添加“浏览文件”对话框?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access VBA DoCmd.TransferText 如何分隔列?

Docmd.TransferText 问题

VBA + TransferText + SpecificationName

具有非美国区域设置的 DoCmd.TransferText

TransferText 导出到 CSV 不工作,但 TransferSpreadsheet 到 XLSX 工作

访问 VBA DoCmd.TransferText CSV 导入 - 错误数据类型检测删除必要的字符串信息