目的是在重新计算单元格后刷新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"对象不支持此属性或方法".
你能告诉我,我是否会错过重要的事情?
我正在尝试根据Harold Abelson和Gerald Jay Sussman着名的"计算机程序的结构和解释"一书中的方案实施Metacircular Evaluator.
http://mitpress.mit.edu/sicp/full-text/sicp/book/node79.html,http://mitpress.mit.edu/sicp/full-text/sicp/book/node80.html
作者建议以这种方式设置环境:
(define (define-variable! var val env)
(let ((frame (first-frame env)))
(define (scan vars vals)
(cond ((null? vars)
(add-binding-to-frame! var val frame))
((eq? var (car vars))
(set-car! vals val))
(else (scan (cdr vars) (cdr vals)))))
(scan (frame-variables frame)
(frame-values frame))))
(define (setup-environment)
(let ((initial-env
(extend-environment (primitive-procedure-names)
(primitive-procedure-objects)
the-empty-environment)))
(define-variable! 'true true initial-env)
(define-variable! 'false false initial-env)
initial-env))
Run Code Online (Sandbox Code Playgroud)
但是,我无法理解为什么
(define myenv (setup-environment))
Run Code Online (Sandbox Code Playgroud)
应该像我们在Scheme中所期望的那样工作,因为,据我所知,Scheme默认情况下将变量按值传递给函数,因此在将"define-variable!"应用于initial-env两次之后,每次都不会更改initial-env ,并且setup-environment函数将在extend-environment返回时返回值.
我的理解错误在哪里,你能告诉我吗?
先感谢您!