相关疑难解决方法(0)

等到ActiveWorkbook.RefreshAll完成 - VBA

我有一个子调用ActiveWorkbook.RefreshAll从XML源带来新数据,然后对它进行多次修改.问题是没有足够的时间让RefreshAll命令完成,因此下面的子和函数最终没有正确执行,这导致重复的行没有被正确擦除.

我尝试过使用Application.WaitSleep函数,但它们似乎也暂停了刷新过程.我只是希望其余代码等到刷新过程完成后再执行其余代码.

有关如何实现这一点的任何想法?现在我只能通过不调用RefreshAll来修复它,这让我想到实现后续执行的第二个流程,但这不是一个好的解决方法.

如果有任何不清楚的地方,请告诉我.谢谢

编辑 所以我从下面的帖子中尝试了一些建议,这就是我能想到的.执行"记录宏",然后在表属性中取消选中"启用后台刷新"不会产生任何结果.之后我也做了一次刷新.这是录制的宏的结果:

With ActiveWorkbook.Connections("XMLTable")
        .Name = "XMLTable"
        .Description = ""
End With
ActiveWorkbook.Connections("XMLTable").refresh
Run Code Online (Sandbox Code Playgroud)

ActiveWorkbook.Connections类没有BackgroundQuery选项,因此我可以将其设置为False.有任何想法吗?

只是为了清楚.这是一个托管在网站上的XML文件,Excel将其导入并导入到表中.然后我将这些数据称为数据透视和其他内容.这里的目标是允许从网站到表的导入过程在执行任何其他命令之前完成.谢谢

编辑2: 经过一番研究后,我找到了这个页面:http://www.mrexcel.com/forum/excel-questions/564959-execute-code-after-data-connection-refresh-finished.html 看来XML类型的连接没有BackgroundQuery布尔值.该选项仅适用于ODBC和OLEDB连接,分别是xlConnectionTypeODBC和xlConnectionTypeOLEDB类型.我使用的XML连接是xlConnectionTypeXMLMAP类型,它没有BackgroundQuery选项.有没有人知道从哪里去?我想到的,现在唯一的解决办法是让在Excel工作表中两个不同的宏按钮,一个清爽,一个用于数据修改,但我宁愿保留该选项的最后.

excel vba excel-vba

37
推荐指数
5
解决办法
20万
查看次数

Excel vba刷新等待

我正在创建一些代码,我可以单击一个按钮,它将刷新我在该工作表上的查询表.

现在,我的问题是,在复制完一些信息之后,我有更多的代码,但是这个代码在刷新开始后立即运行并且信息尚未被替换.

我想创建一个等待刷新完成的时间段,然后其余的代码可以继续.

我不想只等待5秒钟,但是在刷新期间,我不会等待太长或太短,这取决于互联网速度等.

我怎样才能做到这一点?

编辑:

简单代码:

ActiveWorkbook.RefreshAll
Run Code Online (Sandbox Code Playgroud)

在这里,我需要延迟或等待代码,直到所有刷新完成...然后

MsgBox("The Refreshing is Completed!")
Run Code Online (Sandbox Code Playgroud)

那个方向的东西.但是在它实际完成之前它不能说msgbox ....有时候取决于互联网速度,刷新需要更短或更长,所以我希望它是实际刷新时间的变量.

excel vba refresh excel-vba wait

17
推荐指数
3
解决办法
7万
查看次数

Excel VBA - 在Refresh完成后未调用QueryTable AfterRefresh函数

我正在使用VBA开发Excel(2010+)应用程序,并遇到一个问题,一旦查询完成执行,就不会调用AfterRefresh事件函数.

我无法找到许多有关如何在类模块中触发此事件功能的合适资源或文档.我决定使用类模块设计路线,而不是在收到有关QueryTables的早期问题(在此处找到Excel VBA AfterRefresh)的响应后,将事件处理程序放在工作表中.

这是我的类模块的代码,称为CQtEvents

Option Explicit

Private WithEvents mQryTble As Excel.QueryTable
Private msOldSql As String

' Properties
Public Property Set QryTble(ByVal QryTable As QueryTable): Set mQryTble = QryTable:
End Property
Public Property Get QryTble() As QueryTable: Set QryTble = mQryTble:
End Property
Public Property Let OldSql(ByVal sOldSql As String): msOldSql = sOldSql:
End Property
Public Property Get OldSql() As String: OldSql = msOldSql:
End Property

Private Sub Class_Initialize()
    MsgBox "CQtEvents init"
End Sub

' Resets the query …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

5
推荐指数
1
解决办法
7276
查看次数

标签 统计

excel ×3

excel-vba ×3

vba ×3

refresh ×1

wait ×1