在Excel 2003与Excel 2010(VBA)中从SQL数据库中导入数据
-
30-09-2019 - |
题
因此,我的公司终于升级到MS Office2010。直到现在,我一直在2003年工作。我是SQL程序员,并且我不断在Excel中创建报告,从我们的数据库中获取数据。在大多数情况下,我将创建宏来接受用户将输入特定单元格,更改查询的参数,然后根据参数刷新它。
这是一个非常简单的例子:
- 在Excel 2003中,我将打开一个新的工作簿。
- 单击“数据”,然后单击“导入外部数据”,然后“新数据库查询”。
- 然后,它提示您选择一个数据源,因此我将选择要查询的数据库(已经设置为ODBC连接已设置)。
然后,我从查询向导窗口中取消,然后在Microsoft查询编辑器中时,我只输入查询。
为简单起见,我将选择
*
从称为Agents
这只是为公司及其工作的代理商的清单EmployeeIds
.select * from Agents
然后,我从查询编辑器中“ x”“ x”,然后弹出一个名为“导入数据”的盒子问您要在哪里放置数据:在现有工作表中?一个新的工作表?等。我只是让它返回单元中现有工作表中的数据
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
, ,按下按钮,该代理及其ID出现在下表中。真的很简单吗?但是我无法在2010年在Excel中工作。
这是我的步骤和以下错误:
- 我打开Excel 2010,然后转到“数据”选项卡。
- 在“获取外部数据”的部分下,我单击“从其他来源”,然后从下拉菜单中选择“从mircrosoft查询”中选择“从米尔克罗夫族查询”。
- 然后选择数据源框弹出,基本上与上面的步骤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年创建报告时,我才能使它起作用。由于某种原因,似乎找不到更改其命令文本然后刷新的查询。请帮忙,我已经陷入困境了几天!
解决方案
在XL2007和2010中,QueryTables包含在工作表中的“ ListObject”中,因此您只需要将代码调整为:
Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").ListObjects(1).QueryTables(1)
http://msdn.microsoft.com/en-us/library/ff841237.aspx
蒂姆