1

以下のコードのように、VBAを使用してチャートに多くのシリーズを追加しようとしています。

For i = 0 To 9
    Set serNew = chtMap.SeriesCollection.NewSeries
    With serNew
        .XValues = Range("Y4").Cells(1, 1 + 2 * i).Resize(32000, 1) 
        .Values = Range("Y4").Cells(1, 2 + 2 * i).Resize(32000, 1) 
    End With
Next i

一部のシリーズの範囲には、セルにまだデータがありません。ユーザーは後でこのデータを書き込み/ロードします。アイデアは、チャートを準備することです。

問題:ループがそのようなまだ空の範囲に達すると、エラー1004が発生します:SeriesクラスのXValuesプロパティを設定できません。なぜ、これを回避する方法はありますか?

奇妙なことに、これを[グラフ]メニュー->|[ソースデータ...]で手動で行うと完全に正常に機能します。実際、これを手動で実行しながらマクロを記録すると、結果は次のようになります。

ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(4).XValues = "=Sheet2!R4C31:R32003C31"
ActiveChart.SeriesCollection(4).Values = "=Sheet2!R4C32:R32003C32"

しかし、このマクロを再生すると、Excelでエラーが発生します。

これを手動で行うことは、良い見通しではありません。偽のデータをセルに貼り付け、シリーズを作成してから、偽のデータを削除できると思います。私は本当にそのようなおとり商法を引っ張ってExcelをオンにする必要がありますか?

4

4 に答える 4

1

範囲 (両方の列) をコピーして、特殊貼り付けを使用してグラフに追加することができます。

TwoColumnRange.Copy
chtMap.SeriesCollection.Paste Rowcol:=xlColumns, SeriesLabels:=False, _
    CategoryLabels:=True, Replace:=False, NewSeries:=True
于 2011-04-12T12:37:14.290 に答える
0

古い質問ですが...

このコードを作成し、Excel 2010 および 2016 でテストしました。既存の XY 散布図に新しいシリーズが追加され、新しいシリーズの数式が .Name、.Values、および .XValues に使用される空白の範囲にリンクされます。

Sub AddBlankSeries()
  Dim srs As Series

  Set srs = ActiveChart.SeriesCollection.NewSeries

  With srs
    .Name = "=" & ActiveSheet.Range("E2").Address(, , , True)
    .Values = ActiveSheet.Range("E3:E8")
    .XValues = ActiveSheet.Range("D3:D8")
  End With
End Sub

次に、元のコードに戻りました。

Sub AddSeveralBlankSeries()
  Dim i As Long
  Dim chtMap As Chart
  Dim serNew As Series

  Set chtMap = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart

  For i = 0 To 9
    Set serNew = chtMap.SeriesCollection.NewSeries
    With serNew
      .XValues = Range("Y4").Cells(1, 1 + 2 * i).Resize(32000, 1)
      .Values = Range("Y4").Cells(1, 2 + 2 * i).Resize(32000, 1)
    End With
  Next i
End Sub

これも問題なく実行され、シリーズはワークシートの予想される範囲を参照します。

だから、何が問題だったのかわからない。

于 2016-10-18T13:39:51.933 に答える
0

私は(私が自分でやったように)偽のデータをどこかに隠し、すべてのシリーズのデフォルトをそこに向けることをお勧めします。また、シリーズをプロットから非表示に.LineStyle=xlNone.MarkeStyle=xlNoneますActiveChart.Legend.LegendEntries(i).Delete。次に、顧客がデータを入力したら、シリーズが指す場所を置き換えるマクロを実行し、線/マーカー スタイルを設定ActiveChart.HasLegend = Trueし、凡例エントリを再作成します。実際、物事を適切にリセットするには、凡例をオフにしてから再度オンにする必要がありました。

幸運を。

于 2011-04-06T20:31:59.147 に答える
0

データが入力されたにシリーズを追加できるサブを呼び出すシート ボタンを追加することにしました。また、各シリーズを実際に追加する前に、さまざまな範囲が空かどうかもチェックします。これは最もクリーンなソリューションのように感じます。

于 2011-04-12T16:57:38.063 に答える