0
この質問はすでに別のトピックで議論されていましたが、解決策は私を助けていません。私はグラフの一連のデータを計算して表示しようとしています。 "Calculate y" - > "Update Series" - > 100 ms待ち - > "Recalculate"のようなものです。プログラムは実行されていますが、チャートはMain-Subが完全に終了したときのみ更新されます(各100 ms後ではありません)。Run VBA RuntimeでExcelチャートを更新する
このシリーズは、VBA内の配列に完全に基づいており、セルは参照しません。
"スリープ"機能の直後にブレークポイントを設定してプログラムを実行すると、グラフが更新されます。
DoEventsとchart.Refreshメソッドは私に必要な結果を与えてくれません。誰かがアイデアを持っていますか?あなたの助けを借りてくれてありがとう。
Sub Main()
Dim ws As Worksheet
Dim mychart As Chart
Dim ser As Series
Dim x(1 To 10) As Double
Dim y(1 To 10) As Double
Dim i As Integer
Set ws = ThisWorkbook.Sheets("Sheet1")
Set mychart = ws.ChartObjects("Chart 1").Chart
Call DeletePlot(mychart)
For i = 1 To 10
x(i) = i
y(i) = i
Next i
' Plot first data
Set ser = mychart.SeriesCollection.NewSeries
With ser
.Values = y
.XValues = x
End With
Dim j As Integer
For j = 2 To 4
For i = 1 To 10
y(i) = i^j ' update data
Next i
With ser
.Values = y ' update series
End With
mychart.Refresh ' Does not work
DoEvents ' Does not work
Sleep (100)
Next j
End Sub
スリープ機能:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
PlotDelete機能:
Sub DeletePlot(mychart As Chart)
Dim ser As Series
For Each ser In mychart.SeriesCollection
ser.Delete
Next ser
End Sub
コードの最初の部分(プロットの削除+データの追加)を機能させ、XとYを再計算した後に呼び出す方法については、 – Luuklag
と同じ結果が得られます。チャートはメインの最後にのみ更新されます。 –
あなたのコードのどこかにapplication.screenupdating = falseを使用していますか? – Luuklag