Access中Office.FileDialog调用Filters.Add报错及Saved Import传参问题
问题解决方案
一、文件对话框报错修复
错误原因
你当前使用的msoFileDialogFolderPicker是文件夹选择对话框,该控件本身设计上不支持文件筛选相关的Filters属性/方法,因此执行到.Filters.Add时会抛出错误。你需要选择单个Excel文件,应该改用msoFileDialogFilePicker(文件选择对话框)。
修正后代码
Dim FilePath As String Dim dlg As Office.FileDialog ' 改用文件选择对话框常量,未引用Office库时可直接写数值3 Set dlg = Application.FileDialog(msoFileDialogFilePicker) With dlg .AllowMultiSelect = False .Title = "Select Log Sheet" .Filters.Clear .Filters.Add "Excel 工作簿", "*.xlsx" If .Show = True Then ' 单选模式下取选中集合的第一个元素 FilePath = .SelectedItems(1) Else MsgBox "You Clicked Cancel" ' 取消时直接退出过程避免后续报错 Exit Sub End If End With
提示:如果运行时提示
msoFileDialogFilePicker未定义,可手动引用「工具-引用」中的Microsoft Office xx.0 Object Library,或者直接将该常量替换为数值3即可。
二、向已保存的导入配置传递文件路径的实现
Access的已保存导入/导出规则存储在ImportExportSpecifications集合中,你可以通过修改规则的XML配置中的源文件路径,再调用执行方法即可实现动态传入选中的文件:
' 请将下方的"你的导入配置名称"替换为你实际保存的导入配置的名字 With CurrentProject.ImportExportSpecifications("你的导入配置名称") ' 替换XML配置中的源文件路径,首次使用可先打印.XML内容确认原有路径格式 .XML = Replace(.XML, "配置中原有的固定源文件路径", FilePath) ' 执行导入,第二个参数设为True表示导入时不显示进度界面 .Execute False End With
注意事项
- 首次使用时可以先通过
Debug.Print CurrentProject.ImportExportSpecifications("你的导入配置名称").XML打印配置内容,确认原有固定源文件路径的写法,保证替换准确 - 如果需要覆盖已有的目标表,可以在执行导入前先删除旧表,或者在导入配置中提前设置好允许覆盖的规则
内容的提问来源于stack exchange,提问作者Lorne Gottschewski
相关产品推荐
相关产品推荐

