2014-01-17 37 views
0

運行交叉表查詢我有運行在Excel電子表格,我正在尋找一些幫助上一個SQL查詢的問題:Excel中錯誤

我的Windows XP機器使用SP3 Excel和Access 2007。

我最近發現這篇文章,它告訴我如何在Excel中的工作表上運行Access交叉表查詢。 http://datapigtechnologies.com/blog/index.php/running-crosstab-queries-in-excel/

我在excel中運行下面的代碼並嘗試旋轉(交叉表)我的數據。

一切都運行得很好。但是,當我將我的Excel工作簿設置爲只讀時,我需要做的事情突然開始出現錯誤。

當我將下面的代碼與工作簿一起作爲只讀運行時,出現以下錯誤: 外部表格未處於預期格式。 -2147467259(80004005)

Dim Myconnection As adodb.Connection 
Dim Myrecordset As adodb.Recordset 
Dim Myworkbook As String 
Dim strSQL As String 

Set Myconnection = New Connection 
Set Myrecordset = New Recordset 

'Identify the workbook you are referencing 
Myworkbook = Application.ThisWorkbook.FullName 

'Open connection to the workbook. This is where I get the first error. 

Myconnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
        "Data Source=" & Myworkbook & ";" & _ 
        "Extended Properties=Excel 8.0;" & _ 
        "Persist Security Info=False" 



'Build SQL Statement. This statement runs perfectly well when I copy and paste it into Access 
strSQL = "TRANSFORM Last(Field1) AS LastOfField1 " & _ 
      "SELECT Field7, Field6 AS CLIENT, [Field2], [Field3], [Field4], Field5 " & _ 
      "FROM [RawData$A1:K1000] " & _ 
      "GROUP BY Field7, Field6, [Field2], [Field3], [Field4], Field5 " & _ 
      "ORDER BY Field6 " & _ 
      "PIVOT Field8 ;" 


'Load the Query into a Recordset 
Myrecordset.Open strSQL, Myconnection, adOpenStatic 

所以,我讀這表明我嘗試改變我的連接字符串後。所以,我把它改成如下:

Myconnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
        "Data Source=" & Myworkbook & ";" & _ 
        "Extended Properties=Excel 12.0;" & _ 
        "Persist Security Info=False" 

後,我改變了它,連接開了,但是,我再在錯誤上了下面一行:

'Load the Query into a Recordset 
Myrecordset.Open strSQL, Myconnection, adOpenStatic 

沒有找到一個或多個給定值所需的參數。 -2147217904

在我的查詢中沒有參數,我檢查了所有的字段名稱,它們拼寫正確。在MS Access中運行時,SQL是很好的。 經過一番調查後,如果我將我的sql更改爲標準選擇查詢,它會運行。所以也許這個連接字符串不喜歡交叉表查詢。

另外,我在一個受控的IT環境中工作,因此如果需要,我不能運行任何註冊表修補程序。

我現在有點卡住了。任何幫助,將不勝感激。

回答

0

只是一個快速的想法。至於你有一個Excel文件中的宏,我相信它被保存爲.xlsm。因此,我認爲你需要以下類型的ConnectionString的(其他城市如需要):

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsm; 
      Extended Properties="Excel 12.0 Macro;" 

來源:www.ConnectionStrings.Com

+0

THX的小費。它是一個.xlsm。我把它弄彎了,但這次又得到了一個不同的錯誤。 找不到可安裝的ISAM。 -2147467259(80004005) 我得到這個錯誤,如果我運行它只讀或不。很奇怪,如果不使用只讀模式,使用Jet的原始連接工作得很好。這樣,我沒有問題。 – Eddie

+0

嘗試不使用HDR = YES,現在我的答案已更改。 –

+0

請嘗試使用'.Open method'的以下設置:'Myrecordset.Open strSQL,Myconnection,adOpenUnspecified,adLockUnspecified'。 –