因此,我的公司终于升级到MS Office2010。直到现在,我一直在2003年工作。我是SQL程序员,并且我不断在Excel中创建报告,从我们的数据库中获取数据。在大多数情况下,我将创建宏来接受用户将输入特定单元格,更改查询的参数,然后根据参数刷新它。

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

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

    • 为简单起见,我将选择 * 从称为 Agents 这只是为公司及其工作的代理商的清单 EmployeeIds.

    • select * from Agents

  5. 然后,我从查询编辑器中“ 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中工作。

这是我的步骤和以下错误:

  1. 我打开Excel 2010,然后转到“数据”选项卡。
  2. 在“获取外部数据”的部分下,我单击“从其他来源”,然后从下拉菜单中选择“从mircrosoft查询”中选择“从米尔克罗夫族查询”。
  3. 然后选择数据源框弹出,基本上与上面的步骤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

蒂姆

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top