我在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环境中工作,因此如果需要,我无法运行任何注册表修复程序。
我现在有点卡住了。任何帮助将不胜感激。
答案 0 :(得分:0)
只是一个简单的想法。至于你在Excel文件中有一个宏我相信它保存为.xlsm
。因此,我认为您需要以下类型的ConnectionString(在需要时进行更改):
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsm;
Extended Properties="Excel 12.0 Macro;"