Access / Excel VBA – 时间延迟
注意:
-
在Excel中刷新链接到Access数据库的表
-
Excel中的表格需要按照例如Test_Sheet1,Test_Sheet2,Test_Sheet3的顺序进行刷新
-
Excel文件可以被多个用户访问
题
在Access vba中,如果一个excel文件正在使用(只读),如何在Access vba代码中实现一个延迟来等待文件被读/写,以便继续执行代码(刷新表,保存/closures文件)。 请注意,Excel文件需要按顺序刷新。
我没有时间延迟实现一个错误句柄,所以如果错误号= 1004,然后延迟X.这并没有真正做的工作。
VBA中的时序延迟
Function RefreshExcelTables() Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.workbooks.Open "c:\test\Test_Sheet1.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet2.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet3.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close Set ExcelApp = Nothing End Function
popup消息(下图)
更新
Function RefreshExcelTables() On Error GoTo Error Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.workbooks.Open "c:\test\Test_Sheet1.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet2.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close ExcelApp.workbooks.Open "c:\test\Test_Sheet3.xlsb" ExcelApp.ActiveWorkbook.refreshall ExcelApp.ActiveWorkbook.Save ExcelApp.ActiveWindow.Close Error: If Err.Number = 1004 Then call pause(5) Resume End If Set ExcelApp = Nothing End Function Public Function Pause(intSeconds As Integer) Dim dblStart As Double If intSeconds > 0 Then dblStart = Timer() Do While Timer < dblStart + intSeconds Loop End If End Function
我曾经使用这个暂停代码处理:
Public Function Pause(intSeconds As Integer) Dim dblStart As Double If intSeconds > 0 Then dblStart = Timer() Do While Timer < dblStart + intSeconds ' Twiddle thumbs Loop End If End Function
所以你只需要: Call Pause(1)
,然后等待一秒钟。
如果您只需要以第二个增量进行延迟,则效果良好。 我还有一个更强大的代码,如果你想要的话,可以使用更less的代码。