问题描述
我有一个包含多个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。 我已经根据他们对
的回答上传了文件解决方法
当您引用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
它可以很好地处理显示的数据