Yur*_*rov 4 excel vba excel-vba
目的是在重新计算单元格后刷新Excel中的所有图表.
我使用Microsoft Excel 2010.
我们知道,有一个错误?在Excel中,即使之后Excel也不会更新图表
Application.CalculateFullRebuild
Run Code Online (Sandbox Code Playgroud)
一个已知的黑客是做这样的事情:
Application.ScreenUpdating = False
Temp = ActiveCell.ColumnWidth
ActiveCell.Columns.AutoFit
ActiveCell.ColumnWidth = Temp
Application.ScreenUpdating = True
Run Code Online (Sandbox Code Playgroud)
这确实有效.但是,所有Excel图表都会闪烁(更新时它们会变白).你能告诉我,有什么方法可以避免这种眨眼吗?
我试着打电话
.Refresh
Run Code Online (Sandbox Code Playgroud)
在所有图表上(https://msdn.microsoft.com/en-us/library/office/ff198180(v=office.14).aspx):
For Each ChartObject In ActiveSheet.ChartObjects
ChartObject.Refresh
Next
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,我的Excel(2010)显示错误#438"对象不支持此属性或方法".
你能告诉我,我是否会错过重要的事情?
小智 10
未经测试但.Refresh可能适用于此:
Sub ChangeCharts()
Application.ScreenUpdating = False 'This line disable the on screen update for better performance, the blink you see, you could delete both lanes but it will run slower
Dim myChart As ChartObject
For Each myChart In ActiveSheet.ChartObjects
myChart.Chart.Refresh
Next myChart
Application.ScreenUpdating = True'This line reenable the on screen update for better performance, the blink you see, you could delete both lanes but it will run slower
End Sub
Run Code Online (Sandbox Code Playgroud)
这是因为(正如您提供的链接所示).Refresh仅适用于对象Chart,而不适用于您尝试应用它的对象ChartObjects.希望它能引导你朝着正确的方向前进.(还在代码中添加了屏幕上闪烁/闪烁的引号)
圆周率日快乐!
我只是做了一些动画图表实验,使用 VBA 更改单元格中的计数器,以及工作表公式以根据此计数器重新计算图表数据。
我曾经做过很多图表动画,回到 Excel 97-2003 的时代,这些动画效果很好。当 Excel 2007 出来时,动画真的降级了,似乎没有任何帮助。但刚才我在最新版本的 Office 365(版本 1904,版本 11504)中进行了这些测试。事实证明,在过去几年左右的某个时候,微软已经让它运行得更好。
Sub ChartAnimation1()
Dim i As Double
For i = 0 To 1000 Step 50
ActiveSheet.Range("Stepper") = i
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
动画没有动画,也就是说,尽管数据发生了变化,但图表并没有发生变化。
我的经验告诉我DoEvents,在更改单元格的值后,我应该在代码中添加类似的内容。
Sub ChartAnimation2()
Dim i As Double
For i = 0 To 1000 Step 50
ActiveSheet.Range("Stepper") = i
DoEvents
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
这有点帮助,图表改变了,但动画不流畅。一些步骤被遗漏了,效果是一个生涩的动画。
Sub ChartAnimation3()
Dim i As Double
For i = 0 To 1000 Step 50
ActiveSheet.Range("Stepper") = i
DoEvents
DoEvents
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
这比使用 one 运行得慢一点DoEvents,但要流畅得多;仍然不完美,但相当不错。
两个以上的 DoEvents 是矫枉过正:代码花费的时间相同,动画也没有任何流畅。
我也尝试过的各种组合Chart.Refresh,Chart.Activate和ScreenUpdating。两个要点:
DoEvents,无论我尝试过什么其他事情,动画都无法正常工作。DoEvents,这些额外的步骤都没有使动画更流畅,但它们可能会使其速度明显变慢。这很有趣,所以我有一天会写博客。当我这样做时,我会回来并发布链接。