Access / Excel VBA – 时间延迟

注意:

  1. 在Excel中刷新链接到Access数据库的表

  2. Excel中的表格需要按照例如Test_Sheet1,Test_Sheet2,Test_Sheet3的顺序进行刷新

  3. 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的代码。