excel vba代码,用于从单元格公式运行宏

excel vba代码,用于从单元格公式运行宏,vba,excel,charts,Vba,Excel,Charts,我有一个工作簿,其中一个工作表充满了数据,另一个工作表充满了图表。我已经编写了一些代码,根据用户在图表工作表的两个单元格中输入的所需值,自动同时更改每个图表的图表比例和单位。他们需要输入的值在数据表上,并且是相当长的公式。我想更改图表工作表上的单元格,以引用数据表上的值,以便在添加新数据和这些单元格更改时,图表自动更新,即用户无需手动进行更新。我在这里读了一些其他类似的关于使用公式的帖子,并尝试修改代码,但它们都与我的情况有点不同,我还没有得到任何效果 下面是我当前使用的代码,当手动输入值时,该

我有一个工作簿,其中一个工作表充满了数据,另一个工作表充满了图表。我已经编写了一些代码,根据用户在图表工作表的两个单元格中输入的所需值,自动同时更改每个图表的图表比例和单位。他们需要输入的值在数据表上,并且是相当长的公式。我想更改图表工作表上的单元格,以引用数据表上的值,以便在添加新数据和这些单元格更改时,图表自动更新,即用户无需手动进行更新。我在这里读了一些其他类似的关于使用公式的帖子,并尝试修改代码,但它们都与我的情况有点不同,我还没有得到任何效果

下面是我当前使用的代码,当手动输入值时,该代码可以正常工作。数值在图表表上的D6和D7中,我希望它们参考数据表上G4和G5中的公式。谁能告诉我我需要什么额外的代码,它去哪里了

非常感谢

Private Sub Worksheet_Change(ByVal target As Range)

Dim Cht As ChartObject
For Each Cht In ActiveSheet.ChartObjects
    Cht.Chart.Axes(xlValue).MaximumScale = [D6]
    Cht.Chart.Axes(xlValue).MajorUnit = [D7]
Next Cht

End Sub
将代码移动到
图表的事件中

一旦您将
D6
D7
的单元格值设置为等于数据表上的公式值,这将在每次重新计算数据表中的公式时对您起作用,从而导致
D6
D7
重新计算。但是,使用此解决方案时,请记住,只要重新计算数据中的公式,就会触发此代码,这可能是不可取的

注意-最好确定您的范围所指的工作表。这就是为什么我在范围参考前面添加了
Me.

将代码移动到
图表的事件中

一旦您将
D6
D7
的单元格值设置为等于数据表上的公式值,这将在每次重新计算数据表中的公式时对您起作用,从而导致
D6
D7
重新计算。但是,使用此解决方案时,请记住,只要重新计算数据中的公式,就会触发此代码,这可能是不可取的

注意-最好确定您的范围所指的工作表。这就是为什么我在范围参考前面添加了
Me.


如果所有数据输入都出现在数据表上,您可以通过将更新代码放在图表工作表的
激活
事件中来最小化图表更新。这样,更新只在需要时运行(即当有人查看图表时),万岁!激活事件运行得非常好。我猜最后会很简单。非常感谢@TimWilliams的帮助!如果所有数据输入都出现在数据表上,您可以通过将更新代码放在图表工作表的
激活
事件中来最小化图表更新。这样,更新只在需要时运行(即当有人查看图表时),万岁!激活事件运行得非常好。我猜最后会很简单。非常感谢@TimWilliams的帮助!我也尝试过这个方法@ScottHoltzman,但由于某种原因,它仍然不起作用。但是将代码放入激活事件中就成功了。无论如何谢谢你!(顺便说一句,不是我否决了你!)我也尝试过这个方法@ScottHoltzman,但由于某种原因它仍然不起作用。但是将代码放入激活事件中就成功了。无论如何谢谢你!(顺便说一句,不是我否决了你!)
Private Sub Worksheet_Calculate()

Dim Cht As ChartObject
For Each Cht In ActiveSheet.ChartObjects
    Cht.Chart.Axes(xlValue).MaximumScale = Me.Range("D6")
    Cht.Chart.Axes(xlValue).MajorUnit = Me.Range("D7")
Next Cht

End Sub