首页 > 解决方案 > Excel图表范围基于另一个工作表中单元格中的值

问题描述

我有一个包含多个 Pareto 图的工作表(仪表板),另一个工作表(数据)通过标准 $A$1:$B$2 格式的公式为每个图表带来范围。

如何使用“仪表板”中帕累托图中的“数据”表中的这些范围?图表名称在数据 B4 图表范围在数据 C4 我有每个图表的代码,用于以下故障排除是单个图表中的一个

Sub FirstChart()
    Dim FirstChartName As String
    Dim FirstChartRange As Range
    
        FirstChartName = Sheets("Data").Range("B4")
        Set FirstChartRange = Worksheets("Data").Range(Sheets("Data").Range("C4").Value)
        Sheets("Dashboard").ChartObjects("FirstChart").Activate
        ActiveChart.ChartArea.Select
        ActiveChart.HasTitle = True
        ActiveChart.ChartTitle.Text = FirstChartName 
        ActiveChart.SetSourceData Source:=FirstChartRange
End Sub

提前致谢。

更新:感谢@coross24 和@WIL。我已经根据他们对https://gofile.io/d/8HfjQv的回答上传了文件

标签: excelvbaexcel-charts

解决方案


在引用 FirstChartRange 参数时,您似乎有些偏离。由于变量被绑定为范围,您所做的是将单元格 C4 引用为范围,而不是该范围的字符串,然后尝试在该单元格内绘制字符串值!运行您的代码时,我遇到了类型错误。
我已经修改了上面的代码,并在我的工作簿中的单个图表上对其进行了测试,它似乎工作正常。我还提前绑定了您的工作表,因此您不必在代码中重复自己。

Sub FirstChart()
    Dim FirstChartName As String
    Dim FirstChartRange As String
    Dim shtData As Excel.Worksheet
    Dim shtDashboard As Excel.Worksheet
    Dim chart As Excel.chart
    
    Set shtData = ThisWorkbook.Sheets("Data")
    Set shtDashboard = ThisWorkbook.Sheets("Dashboard")
    
    ' get chart name
    FirstChartName = shtData.Range("B4").Value2
    ' get chart range
    FirstChartRange = shtData.Range("C4").Value2
    ' change data for first chart
    Set chart = shtDashboard.ChartObjects("FirstChart").chart
    With chart
        .HasTitle = True
        .ChartTitle.Text = FirstChartName
        .SetSourceData shtData.Range(FirstChartRange)
    End With
       
End Sub

祝你好运!


推荐阅读