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

时间:2018-06-06 15:20:38

标签: excel vba excel-vba

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

我的问题: 我正在使用VBA在其中一个图表上执行计算,这些图表从Access和Excel之间的数据连接生成的表中检索新数据。我们的想法是将新一天的数据包含在使用前一天数据的计算中。新一天的数据始终是列中包含数据的最后一个单元格,前一天的数据位于同一列的正上方。出于某种原因,在下面的代码完成执行之后,新的一天的数据才会被填满。我尝试过使用工作表("工作表' sName")。计算因为图表使用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

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是在将Access / Database数据拉入另一个子目录后,放置要运行的所有子等。每次调用访问信息时都必须执行此操作。如果你打电话给&#34;主人&#34;在Application.OnTime Now + TimeValue(&#34; 00:00:15&#34;)之后的sub,它将失败 - 您必须将所有子跟随放入一个新的主子。