希望这是一个简单的过程。我在 MS Excel 中有一系列图表,它们指向同一工作表上的数据。工作表上的数据是使用 VBA 函数计算的。当 VBA 函数更新数据时,新数字不会反射(reflect)在指向它们的图表中。我尝试调用 Application.Calculate,但这并没有成功。有什么想法吗?
<小时/>UDP日期:
我能够以更小的规模重复这个问题。方法如下:
- 创建新工作簿
- 将工作表 1 重命名为“摘要”
- 将工作表 2 重命名为“数据”
在 VBA 编辑器中打开摘要表并粘贴以下代码:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Parent.Range("worksheetDate") = Target Then Application.CalculateFull End If End Sub
创建新的 VBA 模块
将以下代码粘贴到新的 VBA 模块中(我很抱歉 - 我无法让 Stack Overflow 正确格式化它 - 这是我能做的最好的事情):
。Function getWeekValue (weekNumber As Integer, valuesRange As Range) As Integer Dim aCell As Range Dim currentDate As Date Dim arrayIndex As Integer Dim weekValues(1 To 6) As Integer currentDate = ThisWorkbook.Names("worksheetDate").RefersToRange.Value arrayIndex = 1 For Each aCell In valuesRange If month(currentDate) = month(ThisWorkbook.Sheets("Data").Cells( _ aCell.Row - 1, aCell.Column)) Then weekValues(arrayIndex) = aCell.Value arrayIndex = arrayIndex + 1 End If Next getWeekValue = weekValues(weekNumber) End Function
。
修改数据工作表以匹配以下图像:
- 选择单元格 B1 并将区域命名为“worksheetDate”
- 复制下图中的第 1 行到第 3 行:
- 在第 4 行的“X 周”标题下,输入以下公式
。
= getWeekValue(1, Data!$A$2:$M$2)
每周将 getWeekValue 函数的第一个参数增加 1(例如,为第 1 周传递 1,为第 2 周传递 2,为第 3 周传递 2,等等。
- 使用单元格 A3 到 E4 作为数据创建条形图
- 将单元格 B2 中的日期更改为 2010 年 10 月 1 日到 2010 年 12 月 31 日之间的日期,并选择单元格中当前月份以外的月份。例如,如果日期是 12/11/2010,请将其更改为 11/11/2010 或 10/11/2010。请注意,数据和图表均正确更新。
- 修改单元格 B2 增益中的日期。请注意,数据会更新,但图表不会更新。
奇怪的是,经过一段时间(几分钟)后,图表终于更新了。我不确定这是否是因为我一直在执行触发更新的其他事件,或者是因为 Excel 在几分钟后触发更新。
最佳答案
刚刚找到解决这个问题的方法,因为我也遇到了同样的问题。
我刚刚在打印或导出之前添加了“DoEvents()”,并且图表已刷新。
示例
Sub a()
Dim w As Worksheet
Dim a
Set w = Worksheets(1)
For Each a In w.Range("a1:a5")
a.Value = a.Value + 1
Next
DoEvents
End Sub
关于excel - 数据更改时图表不会自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4466152/