【发布时间】:2018-06-07 00:59:43
【问题描述】:
我在使用某些 Excel 自动化来创建仪表板时遇到了问题。我有一个启用 Excel 宏的工作簿,它还具有与 Access 数据库的数据连接。每天早上(周一至周五),另一个进程会自动将数据导出到 Access 数据库,然后 Excel 会连接到必要的表格以在图表和图形中显示该数据。
我的问题: 我正在使用 VBA 对其中一个图表执行计算,该图表从 Access 和 Excel 之间的数据连接生成的表中检索新数据。这个想法是将新一天的数据包含在使用前一天数据的计算中。新一天的数据始终是该列中包含数据的最后一个单元格,而前一天的数据在同一列的正上方。由于某种原因,直到下面的代码完成执行之后,新一天的数据才会被填充。我尝试使用 Worksheets("Worksheet'sName").Calculate,因为图表使用 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
【问题讨论】:
-
我希望 column 应该是一个字母。它也是一个保留字,可以引用当前 Selection 的列索引号。
-
@Jeeped 它应该是他的主要子
Sub Differences(ByVal column As String)的参数。也就是说,我不知道当它是关键字时它是如何解决的 -
@Marcucciboy2 没错。同样,老实说,我并没有考虑将其作为保留字。我会换成别的!