Excel Chart范围基于另一个工作表中单元格中的值

问题描述

我有一个包含多个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。 我已经根据他们对

Mobile view result

的回答上传文件

解决方法

当您引用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

祝你好运!

,

尝试这个

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 FirstChartRange
End With
   
End Sub
,

瑞力克,
我不得不发布另一个答案,因为我的声誉不高,无法发表评论。有一个绝对的肮脏的解决方法。...似乎数据确实填充了图形,只是您绕过了错误消息,然后将y轴比例设置为auto。参见下面的代码:

Option Explicit

Sub FirstChart()
    Dim FirstChartName As String
    Dim FirstChartRange As String
    Dim rng As Range
    Dim r As Range
    Dim shtData As Excel.Worksheet
    Dim shtDashboard As Excel.Worksheet
    Dim chart As Excel.chart
    Dim tmp As Variant

    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
        On Error Resume Next
        .SetSourceData shtData.Range(FirstChartRange)
        On Error GoTo 0
        .Axes(xlValue).MaximumScaleIsAuto = True
    End With
       
End Sub

希望这有助于解决您的问题!

,

这是创建散点图的示例。 它应该带你去。 使其适应您的需求。

Sub CreateChart()
    Dim wscharts As Worksheet,wsdata As Worksheet
    Set wscharts = Worksheets("Dashboard")
    Set wsdata = Worksheets("Data")
    Dim sh As Shape
    Set sh = wscharts.Shapes.AddChart2(240,xlXYScatterLines)
    sh.Select
    Dim rngText As String
    rngText = wsdata.Name & "!" & wsdata.Range("Data!$C$4").Value
    ActiveChart.SetSourceData Source:=Range(rngText)
    sh.Name = wsdata.Range("Data!$B$4").Value
End Sub

它可以很好地处理显示的数据

enter image description here