【问题标题】:Running an MS Query on the current Excel Workbook在当前 Excel 工作簿上运行 MS Query
【发布时间】: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。即使我使用新名称保存文件或通过电子邮件发送它,它仍然可以工作。

标签: excel vba oledb


【解决方案1】:

嗯,你能把Data Source=C:\myfile.xlsm 放入单元格引用中并作为参数传递吗?

STRING " & Worksheet("Sheet1").Range("A1").Value & " STRING

【讨论】:

  • 这并不能以任何方式解决问题。这仍然需要手动更新单元格引用。
猜你喜欢
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
相关资源
最近更新 更多