2017-05-26 85 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對象並獲取句柄,而不是活動圖表等。ActiveChart可以工作,但是您的代碼將更容易處理並避免任何焦點問題。 'Cells(indx,1)= x'每次都在結尾處設置值?再次使用工作表對象(例如'SheetCodeName.Cells(indx,1)= x'等限定對單元格的調用。 – MacroMarc

+0

我對VBA非常陌生,並且不熟悉它的所有高級功能。 (1)如何命名和獲取圖表對象的句柄以及如何稍後使用它的句柄以及(2)如何使用Worksheet對象限定對單元格的調用。您可以使用上面發佈的代碼作爲示例。謝謝! – DynamicChart

回答

0

WaitSleep將繼續VBA運行,因此屏幕不會更新。 嘗試使用Application.OnTime,沿着這些行(在標準的代碼模塊中,即模塊1)。

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( 「測量結束」) 退出小組 結束如果再次

感謝。