从Excel 2003与Excel 2010(VBA)中的SQL数据库导入数据
所以,我的公司最终升级到了MS Office 2010。到目前为止,我一直在2003年工作。我是一名SQL程序员,我经常用Excel创建报告,从数据库中提取数据。大多数情况下,我会创建宏,这些宏接受用户将在特定单元格中键入的参数,修改查询,然后根据参数刷新查询 下面是一个非常简单的例子:从Excel 2003与Excel 2010(VBA)中的SQL数据库导入数据,sql,vba,excel,excel-2003,excel-2010,Sql,Vba,Excel,Excel 2003,Excel 2010,所以,我的公司最终升级到了MS Office 2010。到目前为止,我一直在2003年工作。我是一名SQL程序员,我经常用Excel创建报告,从数据库中提取数据。大多数情况下,我会创建宏,这些宏接受用户将在特定单元格中键入的参数,修改查询,然后根据参数刷新查询 下面是一个非常简单的例子: 在Excel2003中,我将打开一个新工作簿 单击“数据”,然后单击“导入外部数据”,然后单击“新建数据库查询” 然后,它会提示您选择一个数据源,这样我就可以选择要查询的数据库(已经用ODBC连接设置好了) 然
- 为了简单起见,我将从一个名为
的表中选择Agents
,该表只是为公司工作的代理及其*
员工ID的列表
select*from Agents
A2开始的现有工作表中的数据
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出现在下表中。真的很简单,对吗?但我无法在Excel 2010中实现这一点
以下是我的步骤和错误:
Run-time error '9':
Subscript out of range
我点击debug,调试器突出显示这一行
Set oQuery = Sheet1.QueryTables(1)
我试着让这句话更具体一些,比如:
Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").QueryTables(1)
但我也犯了同样的错误
所以基本上我需要知道的是如何在Excel2010中做这类事情。但这里有一个有趣的提示:如果我在Excel2003中创建这个报告,将它保存为.xls,然后在2010年打开它,它就会工作。我甚至可以将一个副本保存为.xlsm,然后打开它,它将使用同一个宏。只有当我在2010年创建报告时,我才能让它工作。出于某种原因,它似乎无法找到修改命令文本然后刷新的查询。请帮帮我,我已经被困在这上面好几天了 在XL2007和2010中,查询表包含在工作表中的“ListObject”中,因此您只需将代码调整为:
Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").ListObjects(1).QueryTables(1)
蒂姆谢谢蒂姆,我真的很感谢你的帮助。我调整了上面的代码,但得到了以下不同的错误,“运行时错误'438'对象不支持此属性或方法”。我正在谷歌搜索这个错误,并在msdn网站上搜索,但还没有找到修复方法。任何关于为什么会发生这种情况的建议都将不胜感激。再次感谢你,比洛克·蒂姆,这是答案。谢天谢地,我终于成功了。“Set oQuery=工作簿(“第1册”).Sheets(“第1册”).ListObjects(1).查询表”