【问题标题】:VBA chart error Method 'Axes' of Object '_Chart' failed for secondary axis titleVBA图表错误对象'_Chart'的方法'轴'对于辅助轴标题失败
【发布时间】:2016-12-09 06:52:11
【问题描述】:

我正在尝试在 VBA 中的图表中添加辅助垂直轴。我一直遇到这个错误,说对象_Chart 的方法Axes 失败。

我已经查找了解决方案并实施了一些解决方案,以确保辅助轴首先处于活动状态。我的代码如下。当我试图说明辅助轴有标题时,错误发生在倒数第三行。非常感谢任何帮助,因为我仍然是 VBA 的初学者。

Public Sub CreateChartForColumnsOneThreeandFive()

    Dim myChartColumnsOneThreeandFive As ChartObject

    Set myChartColumnsOneThreeandFive = ActiveSheet.ChartObjects.Add(Left:=150, Top:=150, Width:=500, Height:=400)

    myChartColumnsOneThreeandFive.Chart.HasTitle = True

    myChartColumnsOneThreeandFive.Chart.ChartTitle.Text = "Phase Detector Readback vs Substrate Forward Power"

    myChartColumnsOneThreeandFive.Chart.Type = xlLine

    myChartColumnsOneThreeandFive.Chart.SetSourceData Source:=ActiveWorkbook.Sheets("Sheet2").Range("C" & processRowBegin & ":C" & processRowEnd)

    myChartColumnsOneThreeandFive.Chart.SetSourceData Source:=ActiveWorkbook.Sheets("Sheet2").Range("E" & processRowBegin & ":E" & processRowEnd)

    myChartColumnsOneThreeandFive.Chart.SeriesCollection(1).Name = Range("C1")

    myChartColumnsOneThreeandFive.Chart.SeriesCollection(1).Name = Range("E1")

    myChartColumnsOneThreeandFive.Chart.SeriesCollection(1).Select

    myChartColumnsOneThreeandFive.Chart.SeriesCollection(1).AxisGroup = 2

    myChartColumnsOneThreeandFive.Chart.HasTitle = True

    myChartColumnsOneThreeandFive.Chart.ChartTitle.Text = "Substrate Forward Power vs Phase Detector Readback"

    myChartColumnsOneThreeandFive.Chart.Axes(xlCategory).HasTitle = True

    myChartColumnsOneThreeandFive.Chart.Axes(xlCategory).AxisTitle.Caption = "Time"

    myChartColumnsOneThreeandFive.Chart.Axes(xlValue, xlPrimary).HasTitle = True

    myChartColumnsOneThreeandFive.Chart.Axes(xlValue, xlPrimary).AxisTitle.Caption = "Substrate Forward Power"

      myChartColumnsOneThreeandFive.Chart.SeriesCollection(1).AxisGroup = xlSecondary

     myChartColumnsOneThreeandFive.Chart.HasAxis(xlValue, xlSecondary) = True

    myChartColumnsOneThreeandFive.Chart.Axes(xlValue, xlSecondary).HasTitle = True

    myChartColumnsOneThreeandFive.Chart.Axes(xlValue, xlSecondary).AxisTitle.Select

    myChartColumnsOneThreeandFive.Chart.Axes(xlValue, xlSecondary).AxisTitle.Text = _
        "Phase Detector Readback"

End Sub

【问题讨论】:

  • 你在哪一行得到你的错误?你熟悉如何使用With 吗?你的代码在为With myChartColumnsOneThreeandFive.Chart而尖叫
  • @ShaiRado 我在第 21 行遇到错误。这是我将辅助轴标题设置为 true 的地方。我不熟悉如何使用 With。那会摆脱错误吗?
  • 不,但它会缩短您的代码并使其更清晰
  • 好的,谢谢你的建议。我将研究它并开始在我的代码中实现它。您是否熟悉此错误消息?
  • 我认为你的问题是你这里只有 1 个系列,我想你打算有 2 个,不是吗?一个系列看 C 列,另一个系列看 E 列​​,不是吗?这就是为什么您无法设置辅助轴的原因,您只有 1 个系列

标签: vba excel charts


【解决方案1】:

即使不在此代码中,我也假设 processRowBeginprocessRowEnd 在其他地方定义为 Long 并且它们具有数值。

试试下面的代码,它运行没有错误,我不确定你的最终目标是什么以及你的图表应该是什么样子,但我认为你可以很容易地修改它以满足你的需要。

Option Explicit

Public Sub CreateChartForColumnsOneThreeandFive()

Dim myChartColumnsOneThreeandFive As ChartObject 

Set myChartColumnsOneThreeandFive = ActiveSheet.ChartObjects.Add(Left:=150, Top:=150, Width:=500, Height:=400)

With myChartColumnsOneThreeandFive.Chart
    .HasTitle = True
    .ChartTitle.Text = "Phase Detector Readback vs Substrate Forward Power"
    .Type = xlLine

    ' create series 1, set values and name
    .SeriesCollection.NewSeries
    .SeriesCollection(1).Name = Range("C1")
    .SeriesCollection(1).Values = ActiveWorkbook.Sheets("Sheet2").Range("C" & processRowBegin & ":C" & processRowEnd)

   ' create series 2, set values and name
    .SeriesCollection.NewSeries
    .SeriesCollection(2).Name = Range("E1")
    .SeriesCollection(2).Values = ActiveWorkbook.Sheets("Sheet2").Range("E" & processRowBegin & ":E" & processRowEnd)

    .SeriesCollection(1).AxisGroup = 2
    .HasTitle = True
    .ChartTitle.Text = "Substrate Forward Power vs Phase Detector Readback"

    ' set X-axis
    .Axes(xlCategory).HasTitle = True
    .Axes(xlCategory).AxisTitle.Caption = "Time"

    ' set Y-axis
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Caption = "Substrate Forward Power"

    .SeriesCollection(1).AxisGroup = xlSecondary

    ' add a secondary Y-axis ans set it
    .HasAxis(xlValue, xlSecondary) = True
    .Axes(xlValue, xlSecondary).HasTitle = True
    .Axes(xlValue, xlSecondary).AxisTitle.Select
    .Axes(xlValue, xlSecondary).AxisTitle.Text = "Phase Detector Readback"
End With

End Sub

【讨论】:

  • 非常感谢您的意见。有效!我一定会开始实施您的建议和方法。比我写的代码要简单和雄辩得多。
  • @aquarules 不客气,请标记为答案。你知道吗?
【解决方案2】:

我遇到了这个问题,并通过更改我的代码顺序来解决它。以下是有效的顺序:

  1. 删除以前的图表系列(可选)
  2. 设置图表类型
  3. 添加主 y 轴系列
  4. 添加辅助 y 轴系列
  5. 格式化辅助 y 轴
  6. 格式化 x 轴
  7. 设置主 y 轴格式

我认为解决它的方法是在开始时设置图表类型。我在这里写的顺序肯定有一定的灵活性,但我还没有探索过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    相关资源
    最近更新 更多