【问题标题】:How to set source data for chart with a named range in excel VBA如何在excel VBA中为具有命名范围的图表设置源数据
【发布时间】:2019-07-26 16:37:42
【问题描述】:

我正在用 excel 制作图表,并希望将源数据范围设置为命名范围。这是工作表上的第二个图表(因此是 ChartObjects(2))。


Sub PieChartCreation()

Dim shArray() As Variant
Dim cht As ChartObject, CurrentSheetName As String, ChartCount As Integer, CurrentSheet As Worksheet, riskrange As Range, datarange As Range, multirange As Range
Dim NYears As Integer

shArray = Array("TotalCholesterol", "HDL", "LDL", "TRIG", "SBP", "DBP", "BP", "Glucose", "A1C", "BMI", "Waist", "WHR", "PSA")

i = 0
NYears = Worksheets("Copy").Range("CT2").Value

For i = LBound(shArray, 1) To UBound(shArray, 1)

    Worksheets(shArray(i)).Activate

    Set CurrentSheet = Worksheets(shArray(i))

    CurrentSheetName = shArray(i)

    ChartCount = ActiveSheet.ChartObjects.Count

    Set riskrange = Range(CurrentSheet.Cells(1, NYears * 2 + 3), CurrentSheet.Cells(4, NYears * 2 + 3))
    Set datarange = Range(CurrentSheet.Cells(1, NYears * 3 + 3), CurrentSheet.Cells(4, NYears * 3 + 3))
    Set multirange = Union(riskrange, datarange)

    Set co = Sheets(shArray(i)).ChartObjects.Add(1, 1, 1, 1)
    ActiveSheet.ChartObjects(2).Activate
    co.Chart.SetSourceData Source:=Range("multirange")
    co.Chart.ChartType = xlPie
    co.Chart.HasTitle = True
    ActiveChart.ChartTitle.Select
    ActiveChart.ChartTitle.Text = CurrentSheetName
    Set cht = co.Chart.Parent
    With cht
    .Left = CurrentSheet.Cells(7, NYears * 2 + 11).Left
    .Top = CurrentSheet.Cells(7, NYears * 2 + 11).Top
    .Height = CurrentSheet.Range(Cells(7, NYears * 2 + 11), Cells(23, NYears * 4 + 11)).Height
    .Width = CurrentSheet.Range(Cells(7, NYears * 2 + 11), Cells(23, NYears * 4 + 11)).Width
    End With

Next i

End Sub

我在 co.Chart.SetSourceData Source:=Range("multirange") 上收到以下错误

运行时错误 1004:对象“_Global”的方法范围失败

我假设我只是没有正确的命名约定。我应该如何使用命名范围设置此源数据?

【问题讨论】:

    标签: excel vba charts range


    【解决方案1】:
    co.Chart.SetSourceData Source:=Range("multirange")
    

    这是从ActiveSheet 中提取的命名范围“多范围”,这不是您想要做的。 multirange 是 VBA 对象引用/局部变量,不是字符串,不是命名范围。直接使用它:

    co.Chart.SetSourceData Source:=multirange
    

    也就是说,您有许多implicit ActiveSheet references 迟早会造成问题。确保使用适当的 Worksheet 对象系统地明确限定 Range 成员调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多