2017-05-09 45 views
0

如何在当前Excel工作簿上运行MS Query(Ace Oledb),而无需在连接字符串中指定外部数据源?即数据源文件路径在当前Excel工作簿上运行MS Query

下面是我完整的连接字符串:

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的情况。

+0

请出示的代码,你要分配该连接字符串变量。通常,它应该像'strConnection =“Provider = Microsoft.ACE.OLEDB.12.0; User ID = Admin; Data Source =”&ThisWorkbook.FullName & "; Mode = ReadWrite; ...“',check [this answer] (http://stackoverflow.com/a/33400291/2165759)。如果您只需要对记录进行排序或筛选,则[this one](http://stackoverflow.com/a/36189658/2165759)可能会有所帮助。 – omegastripes

+0

该文件需要保存在磁盘上的某个位置,然后才能对其使用SQL查询,并且需要在连接字符串中传递实际的文件路径。 –

+0

这正是我想通过指定数据源编程方式,是否没有其他方式,即使用Power Queen或排序方式,这似乎是一个非常明显的场景,甚至更改Excel工作簿的名称或位置,宏需要更新数据源 –

回答

-1

Hummmm,你可以把Data Source=C:\myfile.xlsm放入单元格引用中,并将其作为参数传递?

STRING “&工作表(” 工作表Sheet1 “),范围(” A1 “)。价值&” STRING

+0

这并不以任何方式解决问题。这仍然需要手动更新单元格引用。 –

相关问题