我有这个甘特图,我正在查看计划与实际日期 . 问题是图表不会同步开始/结束日期 .
我试图用VBA将最大/最小值链接到单元格,但它不会 .
我试图使用这个网站:https://peltiertech.com/link-excel-chart-axis-scale-to-values-in-cells/
但他的代码对我的图表不起作用 .
这是一张图片:
日期必须是相同的,如果我在右边的表格中更改某些值,我们会一起改变吗?谢谢
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveSheet.ChartObjects("Chart 2").Chart
Select Case Target.Address
Case "$G$161"
.Axes(xlCategory).MaximumScale = Target.Value
Case "$F$163"
.Axes(xlCategory).MinimumScale = Target.Value
Case "$G$161"
.Axes(xlValue).MaximumScale = Target.Value
Case "$F$163"
.Axes(xlValue).MinimumScale = Target.Value
End Select
End With
End Sub
2 回答
您重复使用的代码是一个简单的演示程序,它允许在工作表上的6个特定单元格中的一个更改时操作图表的轴 . 但是,这些更改旨在由用户通过键盘进行 . 以这种方式进行更改会触发
Worksheet_Change
事件,并允许识别已更改的单元格 . 事件例程中的代码根据特定工作表单元格的更改来修改图表的轴 .正如David Ziemens在评论中指出的那样,你的问题是如果一个单元格因为通过公式重新计算而改变了值,那么这个改变不会触发
Worksheet_Change
事件 . (当然,完全有可能在工作表上的其他地方手动输入的更改将触发Worksheet_Change
事件和重新计算,导致感兴趣的单元格通过公式更改其值 . 但是,在这种情况下,Target
参数将识别手动更改的单元格,而不是通过公式重新计算的单元格 . )扔掉
Select ... Case
结构,这实际上只在您尝试重用的演示程序的上下文中有用 . 相反,更改代码,以便它无条件地直接从单元格G161
和F163
更新所有4个图表属性(因此使用ws.Range("G161").Value
和ws.Range("F163").Value
而不是Target.Value
来分配图表属性,其中ws
表示这些单元格所在的工作表 - 例如ActiveSheet
或Worksheets("Sheet1")
或任何工作表被调用) . 将图表属性的分配包含在Workbook_SheetChange
sub而不是Worksheet_Change
中,并且只要工作簿重新计算,您的图表就会更新 .这不是一个非常纯粹的解决方案,因为它不会检测单元格
F163
和G161
在重新计算时是否实际发生了变化 . 因此,它存在以下风险:不必要地为4个属性分配未更改的值 . 但是,除非你有一个非常大的工作簿,并且你正在推动计算机可以处理的限制,否则从实际的角度来看这无关紧要 .我发现这个效果最好 . 谢谢你们