2017-05-26 5 views
1

Excel VBAを使用して計測器からデータラインを読み取りました。 私は、Excel Active Chart上でデータを読み込んだ後すぐに、そのデータを動的にプロットしたいと考えています。 私は5秒ごとにデータを待つ必要があり、その間にVBA Application.WaitコマンドかKernel32 Sleepコマンドを使ってスリープ状態にします。 どちらの場合でも、アクティブチャートは更新されません。完全なプロットは、最後の「スリープ」の後にのみ現れます。 ご意見をお待ちしております。ここで遅延付きExcelチャートの動的更新

は、画面が更新されないように簡略化されたコード

Sub New_Data(indx) 
Dim x As Integer 

While True 

    x = Read_Instrument(1) 
    y = Read_Instrument(2) 
    Cells(indx, 1) = x 
    Cells(indx, 2) = y 

    ActiveSheet.ChartObjects.Item(1).Activate 
    ActiveChart.FullSeriesCollection(1).XValues = "=Sheet1!$A$1:$A$" & indx 
    ActiveChart.FullSeriesCollection(1).Values = "=Sheet1!$B$1:$B$" & indx 

    indx = indx + 1 
    Sleep 5000 'Use the KERNEL32 Sleep function for 5000 milliseconds 
Wend 
End Sub 
+0

現在のアプローチで何が間違っているのかを「推測」するためのコードが必要です。このような情報があれば、 'Worksheet_Change'が道のりです。 –

+0

解決しようとする前に、Chartオブジェクトに名前を付けて、アクティブチャートなどではなくハンドルを取得することをお勧めします。アクティブチャートは機能しますが、コードは扱いやすく、フォーカスの問題を回避します。また、 'Cells(indx、1)= x'は毎回最後に値を設定していますか?再度SheetCodeName.Cells(indx、1)= x'などのワークシートオブジェクトを持つCellへの呼び出しを修飾します。 – MacroMarc

+0

VBAの新機能で、すべての高度な機能に精通していません。 (1)Chartオブジェクトのハンドルとハンドルの使い方、および(2)Cellsへの呼び出しをワークシートオブジェクトで修飾する方法について、いくつかの情報に感謝します。上記のコードを例として使用することができます。ありがとうございました! – DynamicChart

答えて

0

WaitSleepは、VBAの実行を継続しますです。 これらの行に沿ってApplication.OnTimeを使用してみてください(標準コードモジュール、つまりModule1)。

Sub refreshMyChart() 
    Dim indx as long: indx = sheet1.Cells(Rows.Count, 1).End(xlUp).offset(1) 

    Cells(indx, 1) = Read_Instrument(1) 
    Cells(indx, 2) = Read_Instrument(2) 

    With Sheet1.ChartObjects(1).FullSeriesCollection(1) 
    .XValues = "=Sheet1!$A$1:$A$" & indx 
    .Values = "=Sheet1!$B$1:$B$" & indx 
    End With 

    ''''' Now Schedule the same routine for 5 seconds later'''''''''' 
    Application.OnTime Now + TimeSerial(0,0,5), "refreshMyChart" 
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
End Sub 

p.sは、あなたが停止するか、合理的な表示されるデータ行の数を保つために、古い行を削除するにはいくつかの方法を定義する必要があります。..このデータは無限に成長できないことに注意してください.:。

0

優秀!どうもありがとうございました。 私は.OnTime構造体を認識しませんでした Application.OnTime Now + TimeSerial(0、0、5)、 "refreshMyChart" とVBAが再帰ルーチンを許可するという事実。 ループを終了するには、そこにコードがありますが、問題に関連していないため投稿しませんでした。ここでは、再び

おかげ場合 た場合のInt(CURRENT_INDEX/nmeasure)* nmeasure> finalvalその後 のMsgBox( "測定終了") 出口サブ 終わりです。

関連する問題