数据更改时图表不会自动更新

Ada*_*dam 10 excel vba excel-2007 excel-vba

希望这是一个简单的.我在MS Excel中有一系列图表指向同一工作表上的数据.工作表上的数据使用VBA函数计算.当VBA函数更新数据时,新数字不会反映在指向它们的图表中.我试过调用Application.Calculate,但是没有做到这一点.有什么想法吗?


UDPATE:

我能够以更小的规模复制这个问题.这是如何做:

  • 创建一个新的工作簿
  • 将工作表1重命名为"摘要"
  • 将工作表2重命名为"数据"
  • 在VBA编辑器中打开摘要表并粘贴以下代码:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Parent.Range("worksheetDate") = Target Then
          Application.CalculateFull
       End If
    End Sub
    
    Run Code Online (Sandbox Code Playgroud)
  • 创建一个新的VBA模块

  • 将以下代码粘贴到新的VBA模块(我很抱歉-我不能让堆栈溢出正确格式化这个对我的生活-这是我能得到它做的最好的)
    .

     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  
    
    Run Code Online (Sandbox Code Playgroud)

    .

  • 修改数据工作表以匹配以下图像:

替代文字

  • 选择Cell B1并命名范围"worksheetDate"
  • 在下图中复制第1行到第3行:

替代文字

  • 在第4行的"Week X"标题下,输入以下公式

.

 = getWeekValue(1, Data!$A$2:$M$2)
Run Code Online (Sandbox Code Playgroud)

每周将getWeekValue函数的第一个参数递增1(例如,第1周传递1,第2周传递2,第3周传递3,等等.

  • 使用单元格A3到E4作为数据创建条形图
  • 将单元格B2中的日期更改为10/1/2010和12/31/2010之间的日期,选择当前在单元格中的月份以外的月份.例如,如果日期为12/11/2010,请将其更改为11/11/2010或10/11/2010.请注意,数据和图表都会正确更新.
  • 修改单元格B2增益中的日期.请注意,数据更新,但图表没有.

奇怪的是,经过一段时间(几分钟)后,图表终于更新了.我不确定这是否是因为我一直在执行其他触发更新的活动,或者因为Excel在几分钟后触发更新.

Dr.*_*ius 0

例如:

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

   w.ChartObjects(1).Chart.Refresh

End Sub  
Run Code Online (Sandbox Code Playgroud)

替代文本