所以,我的公司最终升级到MS Office 2010.到目前为止,我一直在2003年工作 . 我是一名SQL程序员,我不断在Excel中创建报表,从我们的数据库中提取数据 . 大多数情况下,我将创建接受用户将键入特定单元格的参数的宏,更改查询,然后根据参数刷新它 .
这是一个非常简单的例子:
-
在Excel 2003中,我将打开一个新工作簿 .
-
点击"Data"然后"Import External Data"然后"New Database Query" .
-
然后它会提示您选择数据源,因此我将选择我想要查询的数据库(已经使用ODBC连接设置) .
-
然后我取消了查询向导窗口,然后当我在Microsoft查询编辑器中时,我只需输入我的查询 .
-
为简单起见,我将从名为
Agents
的表中选择*
,这只是为公司及其EmployeeIds
工作的代理列表 . -
select * from Agents
-
然后我"x"退出查询编辑器,弹出一个名为"Import Data"的框,它会询问您要将数据放在何处:在现有工作表中?一个新的工作表?我只是让它从Cell
A2
开始返回现有工作表中的数据
那么我在Visual Basic编辑器中的工作簿模块中编写这个简单的宏:
Sub Refresh()
Dim oQuery as QueryTable
Dim oAgent as String
set oQuery = Sheet1.QueryTables(1)
oAgent = Sheet1.Range("A1")
oQuery.CommandText = "select * from Agents where Agent = '"+oAgent+"'"
oQuery.Refresh
End Sub
我创建了一个运行此宏的按钮,并将其粘贴在 B1
中 . 因此,用户打开报告,在 A1
中键入名称,点击按钮,下面的表格中显示了Agent及其ID . 真的很简单吧?但我无法在Excel 2010中使用它 .
以下是我的步骤和后面的错误:
-
我打开Excel 2010,然后转到"Data"选项卡 .
-
在"Get External Data"部分下,单击"From Other Sources"并从下拉列表中选择"From Mircrosoft Query" .
-
然后弹出选择数据源框,它基本上与上面的步骤3,4和5完全相同 .
然后我写相同的宏,创建按钮并将其分配给marco,但当我单击按钮时,我收到以下错误:
Run-time error '9':
Subscript out of range
我点击调试,调试器突出显示这一行
Set oQuery = Sheet1.QueryTables(1)
我尝试使这一行更具体,如下所示:
Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").QueryTables(1)
但我得到同样的错误 .
基本上我需要知道的是如何在Excel 2010中执行此类操作 . 但这里有一个有趣的说明:如果我在Excel 2003中创建此报表,将其另存为.xls,然后在2010年打开它,它将工作 . 我甚至可以将副本保存为.xlsm然后打开它,它将与此相同的宏一起使用 . 只有当我在2010年创建报告时,我无法让它发挥作用 . 似乎由于某种原因它只是找不到查询来改变它的命令文本然后刷新 . 请帮忙,我已经坚持了好几天!
1 回答
在XL2007和2010中,查询表包含在工作表中的“ListObject”中,因此您只需将代码调整为:
http://msdn.microsoft.com/en-us/library/ff841237.aspx
蒂姆