2016-12-09 1 views
1

VBAのチャートにセカンダリの垂直軸を追加しようとしています。オブジェクト_ChartのメソッドAxesが失敗したというこのエラーが発生しています。VBAグラフのエラーメソッド 'Axes'オブジェクト '_Chart'のセカンダリ軸タイトルに失敗しました

解決策を探して、セカンダリ軸が最初にアクティブであることを確認するために述べたものをいくつか実装しました。私のコードは以下の通りです。セカンダリ軸にタイトルがあることを述べようとすると、3行目から最後の行にエラーが発生します。私はまだ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 
+0

どのラインでエラーが表示されますか?あなたは 'With'を使う方法に慣れていますか?あなたのコードは 'With myChartColumnsOneThreeandFive.Chart'のために叫んでいます。 –

+0

@ShaiRado 21行目にエラーが表示されます。これは、セカンダリ軸のタイトルをtrueに設定しているところです。私はWithを使う方法に慣れていません。それはエラーを取り除くだろうか? – aquarules

+0

いいえ、それはあなたのコードを短縮し、それをより明確にするでしょう –

答えて

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 
+0

本当にありがとうございます。出来た!間違いなくあなたの提案やアプローチを実装し始めます。私が書いたコードよりもはるかに単純で雄弁です。 – aquarules

+0

@aquarulesようこそ、答えとしてマークしてください。どのようにするか知っていますか ? –

+0

私はそれを回答としてマークしました。 – aquarules

関連する問題