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
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