小编Bil*_*zky的帖子

通过宏执行SQL语句时,Excel 2010冻结

我在通过宏执行SQL查询时遇到了问题,而在excel 2010中单击“刷新”就没有问题。

设置:

  1. 我打开一个新的Excel 2010工作表。
  2. 转到“数据”标签
  3. 在“获取外部数据”部分下,单击“来自其他来源”,然后从该下拉列表中单击“来自Microsoft查询”
  4. 然后,我选择适当的ODBC连接,通过“查询向导”窗口取消并关闭“添加表”窗口
  5. 然后在“ Microsoft Query”窗口中,我只需单击“ SQL”按钮,输入我的查询,然后单击“确定”
  6. 它在“ Microsoft Query”窗口中执行查询,然后关闭该窗口,在出现提示时选择要在其中填充的单元格,然后单击“确定”。
  7. 然后将查询填充到我的电子表格中。

问题出在这里:

如果我右键单击表格并从右键单击弹出菜单中选择“刷新”,则数据将刷新,并且在屏幕底部显示“正在运行背景查询...”的小旋转地球将出现并旋转直到该查询已运行完毕,Excel将不会冻结,我可以在其他选项卡或其他工作表中工作。

但是,如果我通过宏执行该确切语句:

Range("A6").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Run Code Online (Sandbox Code Playgroud)

旋转的球没有出现,excel停止响应,有时变成白色,并且将鼠标悬停在excel上时,鼠标变成了旋转的“无响应”圆圈。此时,在查询完成执行并且excel开始再次响应之前,我根本无法使用excel。

这是一个问题,因为对于我的大多数报告,我都使用excel中的单元格来允许用户将参数插入到我执行的SQL语句中。

例:

Dim oQuery As QueryTable
Dim oDate As String

Set oQuery = ActiveWorkbook.Sheets("Sheet1").ListObjects(1).QueryTable

oDate = Range("B1")

oQuery.CommandText = "exec database.dbo.ExampleProcedure @SuppliedDate = '" + oDate + "'"

oQuery.Refresh False
Run Code Online (Sandbox Code Playgroud)

在Excel 2003中这不是问题,但仅在我切换到2010并不得不更改查询表vb代码时出现,如下例所示

在2003年:

 Set oQuery = Sheet1.QueryTables(1)
Run Code Online (Sandbox Code Playgroud)

在2010年:

Set oQuery = ActiveWorkbook.Sheets("Sheet1").ListObjects(1).QueryTable
Run Code Online (Sandbox Code Playgroud)

同样,它仅发生在我编写的报告的大约75%上,并且仅在SQL语句花费几秒钟的刷新时间时才是一个明显的问题。这已经成为一个很大的问题,因此,我非常感谢任何可以提供帮助的人。非常感谢。

sql excel vba

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

excel ×1

sql ×1

vba ×1