在Excel中运行交叉表查询时出错

时间:2014-01-17 10:43:13

标签: excel vba excel-vba ado jet

我在excel电子表格上运行SQL查询时遇到问题,我正在寻求一些帮助:

我在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环境中工作,因此如果需要,我无法运行任何注册表修复程序。

我现在有点卡住了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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