2016-11-18 4 views
1

私はVBマクロからExcelの縦棒グラフを作成しています。 3つの水平参照線を追加して、マクロが完了すると、最初のものだけが表示されます(縦棒グラフとともに)。ただし、ブックを保存してもう一度開くと、3つの参照線がすべて表示されます。あるいは、「データの選択」のデザインタブに移動して参照線名のいずれかをクリックするだけで、すべて3がすぐに表示されます。マクロが完成したときに自動的に表示されるようにマクロに入れることができるアイディアなぜ私のExcelチャートから一部のシリーズが一時的に欠落していますか?

あるこれら3基準線を作成するコード(scであるチャートのSeriesCollection):

With sc.NewSeries 
    .ChartType = xlXYScatterLinesNoMarkers 
    .Name = "A" 
    .XValues = "={1,3}" 
    .Values = "={100,100}" 
End With 
With sc.NewSeries 
    .ChartType = xlXYScatterLinesNoMarkers 
    .Name = "B" 
    .XValues = "={1, 3}" 
    .Values = "={80, 80}" 
End With 
With sc.NewSeries 
    .ChartType = xlXYScatterLinesNoMarkers 
    .Name = "C" 
    .XValues = "={1, 3}" 
    .Values = "={50, 50}" 
End With 

EDIT:ここ@アクセル・リヒターによって回答のデータを使用してスクリーンショットです。これは、マクロが終了した直後のものです。

Screenshot

+0

コード(F8)をステップ実行すると、期待どおりに表示されますか? –

+0

はい、私はそれを踏み出すとうまく表示されます。 – RonR

+0

'DoEvents'は効果がありません。また、私は 'Application.Wait Now()'を試しましたが、まだ何もありませんでした。 – RonR

答えて

0

私は、これはエクセル2010以降であると仮定します。

新しいシリーズを追加した後にパラメータなしでChart.ChartWizard Methodを呼び出します。

例:

我々が持っていると仮定します。

enter image description here

そして、このマクロを実行した後:

Sub addChart() 

Dim oChart As ChartObject 
Dim sc As SeriesCollection 

Set oChart = ActiveSheet.ChartObjects.Add(300, 40, 300, 200) 
oChart.Chart.ChartWizard Source:=ActiveSheet.Range("A1:D4"), Gallery:=xlColumn 

Set sc = oChart.Chart.SeriesCollection 

With sc.NewSeries 
    .ChartType = xlXYScatterLinesNoMarkers 
    .Name = "A" 
    .XValues = "={1,3}" 
    .Values = "={100,100}" 
End With 
With sc.NewSeries 
    .ChartType = xlXYScatterLinesNoMarkers 
    .Name = "B" 
    .XValues = "={1, 3}" 
    .Values = "={80, 80}" 
End With 
With sc.NewSeries 
    .ChartType = xlXYScatterLinesNoMarkers 
    .Name = "C" 
    .XValues = "={1, 3}" 
    .Values = "={50, 50}" 
End With 

oChart.Chart.ChartWizard 

End Sub 

を私たちは持っている:

enter image description here

+0

ありがとう、しかし、私はこのコードを実行すると、まったく同じ問題が発生します。最初の行だけが表示されます。 – RonR

+0

どのExcelバージョンですか? Excel2006で私のために働いています。 –

+0

Office 365 - Excel 16.0.6965.2105 – RonR

0

私はまだそれらの行が私のために表示されない理由については何の説明もありませんが、私はそれらを可視に強制する「解決策」を見つけました。マクロの最後に次の行を追加して、最後に余分なシリーズを追加し、(b)すぐに削除します。

With sc.NewSeries 
    .ChartType = xlXYScatterLinesNoMarkers 
    .Name = "D" 
    .XValues = "={1, 3}" 
    .Values = "={50, 50}" 
End With 
sc(sc.Count).Select 
Application.SendKeys "{Delete}" 

最後の行に注意してください。 Selection.Deleteを使用すると余分なシリーズは削除されますが、目に見えない行はそのままになります。

0

時間があれば、SeriesCollectionオブジェクトを再利用しないでください。

私はこれをC#アプリケーションで実行しました。コード間で唯一の類似点は、同じSeriesCollectionオブジェクトでNewSeries()を呼び出していたことだけです。

Chartwizardにも注意する価値があり、quick-series-create-delete回避策の方法は私にとってはうまくいきませんでした。

各SeriesCollection.NewSeries()呼び出しの前にチャートオブジェクトでseriescollection()を呼び出す作業は何ですか?

のように:

ChartObject co = target.ChartObjects().Item(1); 
Chart c = co.Chart; 
SeriesCollection s = c.SeriesCollection(); 
Series s1 = s.NewSeries(); 
s1.ChartType = XlChartType.xlLine; 

s = c.SeriesCollection(); 
Series s2 = s.NewSeries(); 
s2.ChartType = XlChartType.xlLine; 

合計の推測が、私はのSeriesCollectionクラスの欠陥を疑います。潜在的に、後続のNewSeries呼び出しで一部のイベントが発生しない可能性があります。回避策を使用しているそれぞれのバージョンに応じて、発砲しないイベントが発生していたため、実際には不可視シリーズが表示されます。

関連する問題