【发布时间】:2017-05-09 21:37:47
【问题描述】:
如何在当前 Excel 工作簿上运行 MS Query (Ace Oledb) 而无需在连接字符串中指定外部数据源?即数据源文件路径
以下是我的完整连接字符串:
Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data
Source=C:\myfile.xlsm;Mode=ReadWrite;Extended Properties="Excel 12.0
Xml;HDR=YES";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global
Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New
Database Password="";Jet OLEDB:Create System Database=False;Jet
OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on
Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet
OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass
UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet
OLEDB:Bypass ChoiceField Validation=False
我想删除这个引用Data Source=C:\myfile.xlsm使连接字符串假定它应该始终引用当前的 Excel 文件。
我想要的是能够在我的 Excel 文件中设置一个 MS Query,该文件可以通过电子邮件共享给其他用户。目前我需要以编程方式(VBA)替换连接字符串中的数据源,这不是一个优雅的解决方案。我想避免使用 vba。
【问题讨论】:
-
请显示您将连接字符串分配给变量的代码。一般应该是
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & ThisWorkbook.FullName & ";Mode=ReadWrite;...",勾选this answer。如果您只需要对记录进行排序或过滤,那么this one 可能会有所帮助。 -
该文件需要先保存在磁盘上的某个位置,然后才能对其使用 SQL 查询,并且您需要在连接字符串中传递实际文件路径。
-
这正是我想要通过需要以编程方式指定数据源来省略的内容。有没有其他方法,即通过使用 Power Queen 或排序。这似乎是一个非常明显的场景。即使更改 Excel 工作簿的名称或位置,宏也需要更新数据源
-
不清楚为什么你真的不想使用明显的解决方案?
-
@TimWilliams 因为显而易见的解决方案是尽可能不使用 VBA。即使我使用新名称保存文件或通过电子邮件发送它,它仍然可以工作。