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

问题描述:

因此,我的公司最终升级到MS Office 2010.直到现在我一直在2003年工作。我是一名SQL程序员,我不断创建报告在Excel中从我们的数据库中提取数据。大多数情况下,我将创建接受参数的宏,用户将输入特定的单元格,更改查询,然后根据参数进行刷新。从Excel 2003中导入数据从Excel数据库VS Excel 2010(VBA)

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

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

    • 为了简单起见,我会从一个叫Agents表这仅仅是一个对于公司和他们的EmployeeIds工作的代理列表中选择*

    • select * from Agents

  5. 然后我的“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,点击按钮,该代理及其代码出现在下表中。真的很简单吧?但我不能得到这个在Excel 2010中

这里工作是我的步骤和下面的错误:

  1. 我打开Excel 2010中,并进入“数据”选项卡。
  2. 在“获取外部数据”部分,我点击“从其他来源”,然后从下拉列表中选择“从Mircrosoft查询”。
  3. 然后弹出选择数据源框,它基本上与上述步骤3,4和5完全相同。

然后我写了相同的宏,创建按钮,并将其分配给马可,但是当我按一下按钮我收到以下错误:

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

+0

感谢蒂姆,我真的很感谢帮助。我调整了上面的代码,但后来得到了以下不同的错误,“运行时错误”438“对象不支持此属性或方法”。我在google上搜索这个错误并在msdn网站上搜索,但还没有提出修正。任何建议,为什么这可能会发生将不胜感激。再次感谢Bill Bill – BillSchwartzky 2010-10-15 15:13:00

+0

好吧,Tim,这是答案。感谢上帝,我终于找到了工作。 “Set oQuery = Workbooks(”Book 1“)。Sheets(”Sheet 1“)。ListObjects(1).QueryTable” – BillSchwartzky 2010-10-15 16:51:30