- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个子例程,它调用 ActiveWorkbook.RefreshAll
从网站上的 XML 源引入新数据,然后对其执行多项修改。问题是没有足够的时间来完成 RefreshAll
命令,因此以下子命令和函数最终无法正确执行,从而导致重复的行无法正确删除。
我尝试过使用 Application.Wait
和 Sleep
函数,但它们似乎也暂停了刷新过程。我只是希望其余代码等到刷新过程完成后再执行其余代码。
现在我只能通过不调用 RefreshAll
来修复它,这让我想到了实现第二个流程以供稍后执行,但这不是一个好的解决方法。
根据http://www.mrexcel.com/forum/excel-questions/564959-execute-code-after-data-connection-refresh-finished.html ,XML 连接没有 BackgroundQuery
bool 值。该选项仅适用于 ODBC 和 OLEDB 连接,它们的类型分别为 xlConnectionTypeODBC
和 xlConnectionTypeOLEDB
。我使用的 XML 连接类型为 xlConnectionTypeXMLMAP
。
此代码是我通过 UI 执行此操作时记录的宏(包括取消选中表属性中的“启用后台刷新”):
With ActiveWorkbook.Connections("XMLTable")
.Name = "XMLTable"
.Description = ""
End With
ActiveWorkbook.Connections("XMLTable").refresh
ActiveWorkbook.Connections
类没有 BackgroundQuery
选项,因此我可以将其设置为 False。
如何强制后续代码等待 RefreshAll
完成?
最佳答案
我在 OLEDBConnection 连接类型上遇到了同样的问题,但是 DoEvents
(如先前答案中所建议的)对我没有帮助,因为我的数据连接启用了后台刷新。相反,使用 Wayne G. Dunn的answer作为起点,我创建了以下有效的解决方案:
Sub Refresh_All_Data_Connections()
For Each objConnection In ThisWorkbook.Connections
'Get current background-refresh value
bBackground = objConnection.OLEDBConnection.BackgroundQuery
'Temporarily disable background-refresh
objConnection.OLEDBConnection.BackgroundQuery = False
'Refresh this connection
objConnection.Refresh
'Set background-refresh value back to original value
objConnection.OLEDBConnection.BackgroundQuery = bBackground
Next
MsgBox "Finished refreshing all data connections"
End Sub
MsgBox 仅用于测试,一旦您对代码等待感到满意,就可以将其删除。
此外,与 ActiveWorkbook 相比,我更喜欢 ThisWorkbook,因为我知道它会定位代码所在的工作簿,以防焦点发生变化。十分之九这并不重要,但我喜欢谨慎行事。
但是,请注意,由于这使用了 BackgroundQuery
,因此如果您使用 xlConnectionTypeXMLMAP
连接,这将不起作用,抱歉。
关于vba - 如何等到 ActiveWorkbook.RefreshAll 完成后再执行更多代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083668/
... 每 100 次迭代保存您的工作簿? 它只是一个编程语言问题。 是 If x/100 = Int(x/100) Then ActiveWorkbook.Save 还是 if x/100 = In
我对 activeworkbook/activesheet 属性有一些疑问,希望得到您的帮助: 在任何情况下,最多只有一个事件工作簿或没有,这适用于事件表。那正确吗? 如果范围、单元格等属性在使用时不
ActiveWorkbook 和有什么区别和 ActiveWindow ? 有时我觉得他们是一样的。 最佳答案 Windows 和工作簿确实有不同的属性/方法(尽管有些是相同的),所以你不能总是用一个
上下文:Excel 2013 VBA。使用加载项时,术语“ActiveWorkBook”应指正在编辑的文档,而“ThisWorkBook”则指后台的加载项。考虑代码 在外接程序的 ThisWorkBo
我希望这是一个简单的问题... 我的理解是“ActiveWorkbook”返回当前事件的工作簿,即使宏在不同的工作簿中运行(这就是为什么我几乎总是使用“ThisWorkbook”来代替)。 即使宏在不
我创建了一个加载项,将工作表添加到工作簿并导入多个模块。然后,我希望加载项运行现在位于 Active Workbook 中的子例程。这是我到目前为止所拥有的,并且我收到运行时错误“438”:对象不支持
ActiveWorkbook.SaveCopyAs Filename : 给 Runtime error 1004 但点击 Debug>Run> Continue 代码按预期运行。 我有一个启用宏的
执行以下行时,抛出1004运行时错误(应用程序定义或对象定义错误) rangeString = ActiveWorkbook.Names.Item("MyTableName").RefersToLoc
我有一个子例程,它调用 ActiveWorkbook.RefreshAll 从网站上的 XML 源引入新数据,然后对其执行多项修改。问题是没有足够的时间来完成 RefreshAll 命令,因此以下子命
我搜索了这个网站,发现了类似的问题,但仍然不同。 我在这个网站上找到的那些(例如 this 、 this 和 this )涉及太多代码(这可能是它没有正确执行的原因)并且还涉及 Workbook_Be
我不确定为什么我的 VBA 代码片段不起作用 - 我希望有人能提供帮助。 我只是试图将 ActiveWorkbook.SaveAs 作为更大模块的一部分执行,但它出错了。 这是发生错误的代码片段: L
我在 MS-Project 中编写了这段代码,但我认为我包含了所有必要的库来与 Excel 交互。 这是我尝试过的: Sub OpenBackupFile() Titler = ActiveP
在 Excel 2013 (Office 15) 中,快捷方式和非常简单的用户表单(用于格式化)的组合有时会导致事件工作簿消失,而另一个工作簿无缘无故地显示(仅有时会发生,通常是在更改事件工作簿之后)
我的功能如下: Sub saveCSV() Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:= _
我正在编写一个 Excel 加载项。以下是我的代码 private void ThisAddInStartup(object sender, EventArgs e) { Excel.Shee
我正在尝试将一些嵌入在 Excel 电子表格中的 VBA 代码转换为将所有选项卡作为 CSV 保存到 VBS 脚本中,我可以从命令行运行该脚本来执行相同的操作。 Set objFSO = Create
所以,这基本上就是我想要做的。我在从 MSSQL 生成的文件中有一列员工编号。我想在 URL 所在的单元格中创建一个函数,http://www.someplace.com/employee.php?I
我有这个 VBA: ActiveWorkbook.SaveAs Filename:=Path & Filename & ".xls" ActiveWorkbook.Close 这应该将当前事件的工作簿
我发现 Workbook.Activate并不总是将该工作簿带到窗口的前面。我想知道将工作簿设置为窗口顶部的正确方法是什么,所以当宏完成时,这就是您正在查看的工作簿。 我应该使用任何Windows()
从外部源中选择数据 我有一个使用 select 检索数据的数据连接使用 vba 代码从 SQL 服务器查询到 Excel 工作表,如下所示: With ActiveWorkbook.Connectio
我是一名优秀的程序员,十分优秀!