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

时间:2010-10-13 18:30:10

标签: sql vba excel-vba excel-2003 excel-2010

所以,我的公司最终升级到MS Office 2010.到目前为止,我一直在2003年工作。我是一名SQL程序员,我不断在Excel中创建报表,从我们的数据库中提取数据。大多数情况下,我将创建接受用户将键入特定单元格的参数的宏,更改查询,然后根据参数刷新它。

这是一个非常简单的例子:

  1. 在Excel 2003中,我会打开一个新工作簿。
  2. 点击“数据”,然后点击“导入外部数据”,然后点击“新建数据库查询”。
  3. 然后它会提示您选择一个数据源,因此我会选择我想要查询的数据库(已经使用ODBC连接设置)。
  4. 然后我取消了查询向导窗口,然后当我在Microsoft查询编辑器中时,我只需输入我的查询。

    • 为简单起见,我将从名为*的表格中选择Agents,该表格只是为公司及其EmployeeIds工作的代理商列表。< / p>

    • select * from Agents

  5. 然后我从查询编辑器中弹出“x”,弹出一个名为“导入数据”的框,询问您要将数据放在哪里:在现有工作表中?一个新的工作表?我只是让它返回现有工作表中从单元格A2

  6. 开始的数据

    然后,我在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。真的很简单吧?但我无法在Excel 2010中使用它。

    以下是我的步骤和随后的错误:

    1. 我打开Excel 2010,然后转到“数据”标签。
    2. 在“获取外部数据”部分下,我点击“从其他来源”,然后从下拉菜单中选择“来自Mircrosoft查询”。
    3. 然后弹出选择数据源框,它基本上与上面的步骤3,4和5完全相同。
    4. 然后我编写相同的宏,创建按钮并将其分配给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 个答案:

答案 0 :(得分: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