我有一个Access DB,它具有触发Excel工作簿中刷新的VBA功能。 Excel工作簿由一个正在访问Oracle OBIEE的.iqy文件提供。
根据网络流量,刷新Excel工作簿所需的时间会有所不同。
我在我的VBA模块中的其他位置包含了pause(seconds)
函数,这延迟了VBA函数内的执行,但问题是:当网络流量很快时,我无法延迟执行VBA,因为Excel刷新相对较快。当网络流量较慢时,指定的pause()
秒数是不够的,程序崩溃。
有没有办法让VBA跟踪Excel中的刷新过程,并在流程结束后继续执行?
到目前为止我的代码如下:
Function import_tblFromIQY()
Dim Path As String
Path = CurrentProject.Path & "\"
Dim rbFileName As String
rbFileName = "dataPipeline.xls"
' If table tblFromIQY exists, then delete.
If TableExists("tblFromIQY") = True Then
DoCmd.DeleteObject acTable, "tblFromIQY"
Debug.Print ">>> Deleted table tblFromIQY"
End If
' Refresh linked table
Dim appexcel As Excel.Application
Dim wr As Excel.Workbook
Dim wrksheet As Excel.Worksheet
Set appexcel = CreateObject("Excel.Application")
Set wr = appexcel.workbooks.Open(Path & rbFileName)
Set wrksheet = appexcel.worksheets("Main Worksheet")
wr.RefreshAll
Pause (420) ' pause for 7 mins. this is approx how long it takes for the file to refresh.
wrksheet.Rows("1:1").Select
wrksheet.Rows("1:1").Delete Shift:=xlUp
wr.CheckCompatibility = False
wr.Save
wr.CheckCompatibility = True
appexcel.Visible = False
wr.Close
Set wr = Nothing
Set appexcel = Nothing
' Import Data into tblFromIQY
DoCmd.TransferSpreadsheet TransferType:=acImport, SpreadsheetType:=acSpreadsheetTypeExcel8, tableName:="tblFromIQY", fileName:=Path & rbFileName, _
HasFieldNames:=True
Debug.Print ">>> Imported data to tblFromIQY"
End Function
答案 0 :(得分:2)
经过一段谷歌搜索后,我找到了这个解决方案:
Set wrksheet = appexcel.worksheets("Main Worksheet")
wrksheet.Range("A:BN").QueryTable.Refresh BackgroundQuery:=False
BackgroundQuery上的文档。