2016-02-10 175 views
0

我正在構建一個基於Excel的工具,它必須兼容Windows和Mac。該工具需要從數據中提取數據並將數據推送到SQL Server。我已經編寫和測試辦法做到這一點,在Windows的作品,應在的Mac as described here工作(儘管該鏈接涉及到Excel 2011):QueryTable CommandText Not Found

On Error GoTo err1 
Dim connstring As String 
Dim sqlstring As String 
Dim dArr As Variant 
Dim qt As QueryTable 
Dim sht As Worksheet 
Set sht = ThisWorkbook.Sheets(1) 
connstring = "ODBC;DRIVER={SQL Server};SERVER=SERVERNAME;DATABASE=master;Trusted_Connection=yes" 
sqlstring = "SELECT 1" 

Set qt = sht.QueryTables.Add(Connection:=connstring, Destination:=sht.Range("A1"), Sql:=sqlstring) 

With qt 
    .BackgroundQuery = False 
    .RowNumbers = False 
    .Refresh 
End With 

這種方法不會在Excel 2016年的Mac工作。實際上,當我記錄在Mac上添加連接的過程時,QueryTables.Add方法甚至不顯示連接或SQL參數...

而不是以編程方式創建表,我認爲解決方法可能是手動創建表格,然後根據需要以編程方式更改表格的CommandText(針對不同的參數等)。但是當我嘗試訪問QueryTable對象的CommandText屬性時,Mac VBEditor告訴我它找不到該成員!

是否有人在Excel 2016 for Mac中以編程方式成功創建ODBC QueryTables,或者這是Excel 2016的另一個缺陷?

回答

0

當我遇到你的問題時,我希望找到解決方法,希望有人回答。我今天剛剛發現了一個解決方法。我的問題似乎與你的問題類似,所以也許我的解決方案將幫助你:

我無法在VBA中使用QueryTables.Add或CommandText,但我能夠手動創建表格,然後使用Excel表格中的數據作爲一個參數。
我通過單擊新建數據庫查詢>從數據庫手動創建了ODBC連接,您可能知道該如何操作。我進入我的SQL到Microsoft Query窗口這樣:

SELECT DISTINCT WIN 
    FROM RETAIL.OFFER 
    WHERE WIN LIKE 'XS%' 
    AND WIN NOT LIKE 'XS92500' 
    AND WIN NOT LIKE 'XS%a' 
    AND TITLE = 'The Binge' 

我是新來的SQL因此它可能不漂亮,但它的工作。但是,我需要將標題作爲電子表格中單元格的參數,而不是每次都必須手動更新SQL。我能夠進入連接>屬性>定義>編輯查詢和更改SQL這個要做到這一點:

SELECT DISTINCT WIN 
    FROM RETAIL.OFFER 
    WHERE WIN LIKE 'XS%' 
    AND WIN NOT LIKE 'XS92500' 
    AND WIN NOT LIKE 'XS%a' 
    AND TITLE = ? 

注意:只有當我真正按下編輯查詢按鈕的工作,它改變了所有的「如果我在「定義」窗口中對其進行編輯,可以彎曲撇號。 Excel然後提示我選擇一個參數來替換?在SQL中。您可以在電子表格中選擇一個單元格,也可以爲該參數輸入任何其他字符串。您也可以返回到連接並根據需要編輯參數。
現在,我只是使用VBA宏來刷新所有連接並將數據從單元傳遞到查詢中。這適用於我的用例,如果您已經知道以這種方式創建參數並且您需要使用VBA,則很抱歉。我無法讓我的VBA在我的Mac上工作,即使它在我的PC上完美工作。希望這會對那裏的人有所幫助!