【问题标题】:Capture / Read message displayed in the Excel Application status bar捕获/阅读 Excel 应用程序状态栏中显示的消息
【发布时间】:2017-08-11 14:58:25
【问题描述】:

我创建了用于更新 Excel 工作表、刷新数据连接并保存 Excel 工作表的 VBA 代码。

问题:当数据连接仍在刷新时,VBA 代码移动到保存 Excel 的下一步,并出现提示用户取消刷新的弹出窗口(其中这不应该是因为必须进行刷新并且用户输入破坏了 VBA 代码的目的)。下面是一个sn-p:

 wkb.Connections("Connection2").Refresh
    While (InStr(1, Application.DisplayStatusBar, "Running background query") > 0)

    Wend
 wkb.Save
 wkb.RefreshAll
    While (InStr(1, Application.StatusBar, "Running background query") > 0)

    Wend
 wkb.Save

问题:如何在状态栏中捕获此文本,以便等到它消失? Application.StatusBar 不能解决问题。

【问题讨论】:

  • DoEvents 命令而不是While..Wend 循环工作? support.microsoft.com/en-us/kb/118468
  • 最简单的解决方案是在连接属性中关闭后台查询选项(如果可用)。
  • 你的第一个是检查状态栏是否显示While Application.StatusBar = "testing ddddddd": DoEvents: Wend
  • Application.statusbar 仅返回使用代码显示在状态栏(左角)的文本。在所有其他时间它只返回False

标签: vba excel


【解决方案1】:

这里有一些可以尝试的方法:

1) 转到连接属性并取消选中“启用后台刷新”。在执行下一行代码之前,它应该等待刷新结束。或者在代码中:

ActiveWorkbook.Connections("CONNECTION_NAME").ODBCConnection.BackgroundQuery = False

2) 试试CalculateUntilAsyncQueriesDone方法

Connections("CONNECTION_NAME").Refresh
Application.CalculateUntilAsyncQueriesDone

如果您使用的是 Excel 2010 或更高版本,则应该等到这一切都完成。

3) 可能的第三个选项,只是一个 DoEvents 命令

Connections("CONNECTION_NAME").Refresh
DoEvents

【讨论】:

  • Alex D 的回答非常有帮助,但我正在寻找获取状态栏文本的方法。如果我找到方法,我会回复。
猜你喜欢
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 2016-04-21
  • 2014-08-18
  • 1970-01-01
相关资源
最近更新 更多