Excel VBA 宏在刷新工作表上的单元格之前完成



我遇到了一些 Excel 自动化用于创建仪表板的问题。我有一个启用 Excel 宏的工作簿,该工作簿还具有与 Access 数据库的数据连接。每天早上(周一至周五(,另一个进程会自动将数据导出到 Access 数据库,然后 Excel 连接到必要的表以在图表和图形中显示该数据。

我的问题: 我正在使用 VBA 对其中一个图表执行计算,该图表从 Access 和 Excel 之间的数据连接生成的表中检索新数据。这个想法是将新一天的数据包含在使用前一天数据的计算中。新一天的数据始终是列中有数据的最后一个单元格,而前一天的数据位于同一列中数据的正上方。由于某种原因,直到下面的代码完成执行后,新的一天的数据才会被填充。我尝试使用工作表("工作表的名称"(。计算是因为图表使用 IF 语句从数据连接生成的表中获取数据,但它仍然不起作用。我还尝试使用延迟,认为代码运行得太快,但结果是一样的。还有其他人遇到过这个问题吗?

我用于此计算的代码:

Sub Differences(ByVal column As String)
Dim i As Integer
Dim ws As Sheets
Dim wks As Worksheet
Dim dailyDiff As Double
Dim busDayDiff As Double
Dim mtdDiff As Double
Set ws = ThisWorkbook.Worksheets
Set wks = ws("Charts") 
wks.Activate
i = 4
wks.Range(column & i).Select
Do While Selection.Offset(1, 0).Value <> ""
i = i + 1
wks.Range(column & i).Select
Loop
**dailyDiff = Selection.Value - Selection.Offset(-1, 0).Value** '<---The Calculation i'm referring to
busDayDiff = Selection.Value - Selection.Offset(0, 1).Value
mtdDiff = Selection.Value - wks.Range(column & "3").Value
ws.Range(column & "28") = busDayDiff
ws.Range(column & "29") = dailyDiff
ws.Range(column & "30") = mtdDiff
End Sub

Sub AllDifferences()
Differences ("b")
Differences ("d")
Differences ("f")
Differences ("h")
Differences ("j")
Differences ("l")
End Sub

Sub RefreshAll()
Application.ScreenUpdating = False
ActiveWorkbook.RefreshAll
Application.ScreenUpdating = True
End Sub

Sub test()
Call RefreshAll
Call AllDifferences
End Sub

解决此问题的一种方法是将访问/数据库数据拉取到其他子后要运行的所有 sub 等放入不同的 sub。每次调用访问信息时都必须执行此操作。如果您在 Application.OnTime Now +TimeValue("00:00:15"( 之后调用"主"子中的另一个 sub,它将失败 - 您必须将所有后续订阅放入新的主订阅中。

最新更新