2017-05-09 75 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

這並不以任何方式解決問題。這仍然需要手動更新單元格引用。 –

相關問題