2016-05-04 5 views
-1

Ich versuche, ein Diagramm zu erstellen, das die Daten mit der Zeit ändert. Die Y-Daten sind die gleichen, aber nur die X-Daten werden geändert. Ich verwende Application.Wait, um einige Zeit zwischen jeder Änderung der X-Werte zu erlauben (damit ich es mit meinem Auge sehen kann). Allerdings, wenn ich den Code laufen lasse ist es sehr lückig und ich bin mir nicht sicher ob ich die Application.Wait Funktion richtig benutze aber ich möchte zwischen jedem Wechsel eine Zeit von 0,5 Sekunden haben. Gibt es eine Möglichkeit, es glatter zu machen, so dass ich das Diagramm sehen kann, wie es mit der Zeit ändert (wie der Code durch die Reihen Schleifen)Versuchen Sie, ein Diagramm zu erstellen, das Daten mit der Zeit zu sehr verzögert verändert?

Hier mein Code:

Sub UpdateChart() 

Dim ChtObj As ChartObject 
Dim counter As Integer 
Dim timecount As Double 


Set ChtObj = ActiveSheet.ChartObjects.Add(200, 50, 500, 500) 

'Creating intial graph 
With ChtObj.Chart 
    'Chart Type 
    .ChartType = xlXYScatterSmooth 

    'Datainput 
    .SeriesCollection.NewSeries 
    .SeriesCollection(1).Name = "Bending moment" 
    .SeriesCollection(1).Values = Range("D3:H3") 
    .SeriesCollection(1).XValues = Application.Union(Cells(5, 4), Cells(5, 5), Cells(5, 6), Cells(5, 7), Cells(5, 8)) 
    .HasLegend = False 

    'Title 
    .HasTitle = True 
    .ChartTitle.Text = "Bending moment along pile " & ActiveSheet.Name & " at time 0 seconds" 

    'X-Axis 
    .Axes(xlCategory, xlPrimary).HasTitle = True 
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Bending moment (kN.m)" 
    'Y-Axis 
    .Axes(xlValue, xlPrimary).HasTitle = True 
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Length along pile (m)" 

End With 

'Loopingthrough data to be done** 
counter = 6 
timecount = 0 
While (Not IsEmpty(Cells(counter, 4))) 

    'Pausing for half a second and recording cumulative time 
    timecount = timecount + 0.5 
    Application.Wait (Now() + TimeValue("0:00:005")) 

    'Updating Chart data 
    With ChtObj.Chart 
     .SeriesCollection(1).XValues = Application.Union(Cells(counter, 4), Cells(counter, 5), Cells(counter, 6), Cells(counter, 7), Cells(counter, 8)) 
     .ChartTitle.Text = "Bending moment along pile " & ActiveSheet.Name & " at time " & timecount & " s" 
    End With 

    'Next row 
    counter = counter + 1 
Wend 
End Sub 
+0

ich denke, [diese SO Beitrag] (http://stackoverflow.com/questions/18602979/how-to-give-a-time-delay-of-less-than-one-second -in-excel-vba) beantwortet Ihre Frage. Versuchen Sie 'Applicaton.Wait (Now() + 1/(24 * 60 * 60.0 * 2))' – OldUgly

Antwort

0

Dies schien zu lösen mein Problem:

Public Function PauseEvent(ByVal Delay As Double) 
    Dim dblEndTime As Double 
    dblEndTime = Timer + Delay 
    Do While Timer < dblEndTime 
    DoEvents 
    Loop 
End Function 
Verwandte Themen