gpt4 book ai didi

excel - 在 VBA 中制作具有命名范围的图表

转载 作者:行者123 更新时间:2023-12-04 20:20:00 28 4
gpt4 key购买 nike

我正在尝试编写一些代码,这些代码将通过我已经在我的 Excel 工作簿中建立的命名范围。工作簿中的每张工作表都有不同的布局,这使得为名称编写代码成为工作的最大份额。我已经这样做了,现在想编写代码,循环遍历每张表中的名称,并使用我已经建立的命名范围制作图表。我在以下代码中遇到了一堆错误,希望能得到一些帮助来修复它们并使代码更高效!
ChartName = ActiveSheet.Range(n).Offset(0, -6) & " " & ActiveSheet.Range(n).Offset(0, -5)
我在上面的行中收到一个类型不匹配的错误,我只是无法弄清楚如何处理。另外,ActiveSheet.ChartObjects.Add绘制了无效的属性分配!

Sub WEO_DevCharts()

Sheets("WEO").Activate

Dim objChart As ChartObject
Dim n As Name
Dim ChartName As String

For Each n In ActiveSheet.Names

If n.Name <> "DateRange" Then

ChartName = ActiveSheet.Range(n).Offset(0, -6) & " " & ActiveSheet.Range(n).Offset(0, -5)

Set objChart = ActiveSheet.ChartObjects.Add

With objChart.Chart
.chartType = xlXYScatterLines
.SeriesCollection.Values = n.Value
.SeriesCollection.XValues = ActiveSheet.Range("DateRange").Value
.SeriesCollection.Name = ChartName
.legend.Delete
End With
End If
Next n
End Sub

最佳答案

我在下面做了一些改变

(已更新以处理工作表上的两个单独范围,一个名为 DateRange 的范围和一个名为 Test 的范围。这两个范围都是工作表的本地范围以满足 ActiveSheet 测试,否则它们将属于 ActiveWorkbook {但是DateRange 可以是全局的或本地的,无论哪种方式都可以很好地绘制图形})

  • 而不是 ActiveSheet.Range(n).Offset(0, -6)您需要一个单元格,可能是 n 中的第一个单元格范围,即Range(n).Cells(1).Offset(0, -6) (加上这意味着您的标题位于范围名称左侧的 6 列 - 确保有空格)
  • 尝试添加您的图表,如 ActiveSheet.ChartObjects.Add(Left:=500, Width:=300, Top:=50, Height:=400)
  • 设置 xy 类型后,您可以将 sourcerange 直接设置为您的范围名称 n然后添加 DateRange范围为 x 系列
  • 将您的系列名称添加到第一个系列,即 .SeriesCollection(1).Name = ChartName不是 .SeriesCollection.Name = ChartName
  • 我用过InStr(n.Name, "DateRange") = 0而不是你的n.Name <> "DateRange"避免处理 DateRange 的任何本地名称版本,即 WEO!DateRange

  • 建议你看看 Jon Peltier's excellent site获取更详细的代码示例

    我的本地工作表名称的测试代码的示例屏幕截图
  • TestH10:H13
  • DateRangeD14:D17

  • enter image description here
        Sub WEO_DevCharts()
    Sheets("WEO").Activate
    Dim objChart As ChartObject
    Dim n As Name
    Dim ChartName As String
    For Each n In ActiveSheet.Names
    If InStr(n.Name, "DateRange") = 0 Then
    ChartName = Range(n).Cells(1).Offset(0, -6) & " " & Range(n).Cells(1).Offset(0, -5)
    Set objChart = ActiveSheet.ChartObjects.Add(Left:=500, Width:=300, Top:=50, Height:=400)
    With objChart.Chart
    .ChartType = xlXYScatterLines
    .SetSourceData Range(n)
    .SeriesCollection(1).XValues = Range("DateRange")
    .SeriesCollection(1).Name = ChartName
    .Legend.Delete
    End With
    End If
    Next n
    End Sub

    关于excel - 在 VBA 中制作具有命名范围的图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8675315/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com