为实现日志记录需求,如何逐个刷新Excel数据连接?
单独刷新Excel数据连接并记录刷新时间的VBA实现
核心思路
遍历工作簿内的每个数据连接,逐个执行刷新操作,同时将每个连接的名称和刷新结束时间记录到指定工作表中,满足单独刷新+时间记录的需求。
具体VBA代码
Sub RefreshEachConnectionWithLog() Dim conn As WorkbookConnection Dim logSheet As Worksheet Dim lastRow As Long ' 指定用于记录日志的工作表,需提前创建并命名为"刷新日志" Set logSheet = ThisWorkbook.Worksheets("刷新日志") ' 首次运行时自动写入表头 If logSheet.Range("A1").Value = "" Then logSheet.Range("A1").Value = "数据连接名称" logSheet.Range("B1").Value = "刷新结束时间" End If ' 逐个处理每个数据连接 For Each conn In ThisWorkbook.Connections ' 设为同步刷新,确保刷新完成后再记录时间 conn.OLEDBConnection.BackgroundQuery = False conn.Refresh ' 定位日志表的下一行空行 lastRow = logSheet.Cells(logSheet.Rows.Count, "A").End(xlUp).Row + 1 ' 写入连接名称和当前时间(即刷新结束时间) logSheet.Cells(lastRow, "A").Value = conn.Name logSheet.Cells(lastRow, "B").Value = Now() Next conn MsgBox "所有数据连接已单独刷新,日志记录完成!" End Sub
关键注意事项
- 同步刷新设置:必须将
BackgroundQuery设为False,否则Excel会异步刷新连接,导致时间记录的是触发刷新的时间而非完成时间,失去记录意义。 - 多连接类型兼容:如果你的数据连接是ODBC类型,只需把代码中的
conn.OLEDBConnection替换为conn.ODBCConnection即可,逻辑保持不变。 - 日志表准备:提前在工作簿里新建一张名为
刷新日志的工作表,无需手动加表头,代码会自动处理首次运行的情况。
内容的提问来源于stack exchange,提问作者Max B
相关产品推荐
相关产品推荐

