将Excel图表轴比例链接到单元格中的值

我有这个甘特图,我在看计划与实际date。 问题是图表不会同步开始/结束date。

我想连接最大/最小值的单元格与VBA,但它不会。

我试图使用这个网站: https : //peltiertech.com/link-excel-chart-axis-scale-to-values-in-cells/

但他的代码不适合我的图表。

这里是一张图片: 在这里输入图像说明

date必须是相同的,并且如果我改变右边的表中的一些值任何想法一起改变? 谢谢

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 

您重新使用的代码是一个简单的演示程序,它允许在工作表上的6个特定单元格中的一个更改时操纵图表的轴。 但是,这些更改是由用户通过键盘进行的。 以这种方式进行更改会触发Worksheet_Change事件,并允许识别更改的单元格。 事件例程中的代码根据哪个特定的工作表单元格被更改来修改图表的坐标轴。

正如David Ziemens在他的评论中指出的那样,您的问题是,如果单元格通过公式重新计算值更改值,那么此更改不会触发Worksheet_Change事件。 (当然,在工作表的其他地方手工input的更改完全可能触发了一个Worksheet_Change事件和一个重新计算,导致感兴趣的单元格通过公式来更改其值,但是在这种情况下, Target参数将会识别手动更改的单元格,而不是通过公式重新计算的单元格。)

丢弃Select ... Case结构,这实际上只在您尝试重用的演示程序的上下文中才有用。 相反,更改代码,使其无条件地直接从单元格G161F163更新所有4个图表属性(所以使用ws.Range("G161").Valuews.Range("F163").Value Target.Value指定图表属性的值,其中ws表示这些单元格位于哪个工作表 – 例如ActiveSheetWorksheets("Sheet1")或任何工作表被称为)。 将图表属性的分配包装在Workbook_SheetChange子部分而不是Worksheet_Change并且只要工作簿重新计算,图表就会更新。

这不是一个非常纯粹的解决scheme,因为在重新计算时,它不会检测单元格F163G161是否实际发生更改。 所以它有这样的风险:4个属性被不必要地分配了不变的值。 但是,除非你有一个非常大的工作簿,并且正在推动你的计算机可以处理的极限,否则从实际的angular度来看这并不重要。

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) With ActiveSheet.ChartObjects("Chart 2").Chart ActiveSheet.ChartObjects("Chart 2").Activate ' for main axes ActiveChart.Axes(xlValue).MaximumScale = Worksheets("Single Tool").Range("$G$161").Value ActiveChart.Axes(xlValue).MinimumScale = Worksheets("Single Tool").Range("$F$163").Value 'for secondary axes ActiveChart.Axes(xlValue, xlSecondary).MaximumScale = Worksheets("Single Tool").Range("$G$161").Value ActiveChart.Axes(xlValue, xlSecondary).MinimumScale = Worksheets("Single Tool").Range("$F$163").Value End With End Sub 

我发现这个效果最好。 谢谢你们