2017-09-01 5 views
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 
+0

コードの最初の部分(プロットの削除+データの追加)を機能させ、XとYを再計算した後に呼び出す方法については、 – Luuklag

+0

と同じ結果が得られます。チャートはメインの最後にのみ更新されます。 –

+0

あなたのコードのどこかにapplication.screenupdating = falseを使用していますか? – Luuklag

答えて

0

タイマーなどApplication.OnTimeまたはWindows APIタイマーはlinkは私に必要な動作を与えた参照してください。

関連する問題