我有一个宏,它以CSV格式从网站提取数据并将其放在Sheet1 A1中。现在,我想将数据文本转换为列。如果我运行此pull data宏,然后将文本单独转换为column宏,则效果很好。如果我在一个宏中执行此操作,将无法正常工作,因为需要花费一些时间来提取数据,并且要在数据提取完成之前执行文本到列代码。
如何使宏等到数据提取完成后再对列进行文本处理?
public MainPage()
{
InitializeComponent();
WebView.Source = new HtmlWebViewSource
{
Html = @"<!DOCTYPE html><html><head><style>img { width:100%; }</style></head><body>" + App.strona + @"</body></html>",
};
}
答案 0 :(得分:1)
尝试在其中添加DoEvents以对操作系统产生控制权
DoEvents
With tgt.QueryTables.Add(Connection:= _
url, _
Destination:=tgt.Range("A1"))
.Refresh
End With
和/或:
使用明确的等待时间
With tgt.QueryTables.Add(Connection:= _
url, _
Destination:=tgt.Range("A1"))
.Refresh
End With
Application.Wait Now + TimeSerial(0,0,5) '<== Adjust number of seconds
或者(该列表令人尴尬),请尝试等待由@zac建议的单元格填充。
With tgt.QueryTables.Add(Connection:= _
url, _
Destination:=tgt.Range("A1"))
.Refresh
End With
Dim t As Date
t = Timer
Do
DoEvents
If Timer - t = 100 Then Exit Do '<==To avoid infinite loop
Loop While IsEmpty(tgt.Range("A2"))
答案 1 :(得分:1)
有时我会使用OLEDBConnections从数据库刷新数据。
未设置backgroundquery
时,它的作用与您相同(它继续运行代码而无需等待查询结束)
代码是这样的
With ActiveWorkbook.Connections("ConnName").OLEDBConnection
.BackgroundQuery = False
.CommandText = "Select something"
.CommandType = xlCmdSql
.Connection = "connection string"
.Refresh
End With
尝试为您的连接查找.backgroundquery
参数
答案 2 :(得分:1)
.Refresh BackgroundQuery:=False
代替
.Refresh
解决了这个问题。