vba - 捕获/读取 Excel 应用程序状态栏中显示的消息

标签 vba excel

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

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

 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

enter image description here 问题:如何捕获状态栏中的此文本,以便我可以等到它消失? Application.StatusBar 不起作用。

最佳答案

这里有一些可以尝试的事情:

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

关于vba - 捕获/读取 Excel 应用程序状态栏中显示的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37859474/

相关文章:

vba - VBA 中的 WorksheetFunction.IsNumber() 和 IsNumeric() 有什么区别?

Python:复制并粘贴到特定的行和列

vba - 使用 Content.Find 对象搜索文本并恢复找到的文本

excel - 放置 application.onkey 的事件

excel - 我可以修改此宏以仅在一列上运行吗?

mysql - VBA/ADODB 错误地将数据库视为只读

excel - 将列单元格 "Number saved as Text"转换为数字格式的宏

VBA通过左/右移动找到一行中出现的第一个空单元格

vba - 通过 Excel VBA 的 HTTP Post 协助

excel - 使用 VBA 检查日期是否在两个日期之间