首页 文章

从Excel 2003 VS Excel 2010(VBA)中的SQL数据库导入数据

提问于
浏览
2

所以,我的公司最终升级到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 回答

  • 2

    在XL2007和2010中,查询表包含在工作表中的“ListObject”中,因此您只需将代码调整为:

    Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").ListObjects(1).QueryTables(1)
    

    http://msdn.microsoft.com/en-us/library/ff841237.aspx

    蒂姆

相关问题