2017-06-02 7 views
2

Ich habe ein dynamisches Diagramm, das für stündliche Daten basierend auf einem Zellenwert aktualisiert wird. Diese Zelle wird über eine Bildlaufschaltfläche gesteuert, oder Sie geben das Datum manuell in einer anderen Zelle ein. Werfen Sie einen Blick auf das gif unten für einen Einblick;Aktualisieren eines dynamischen Diagramms beim Ausführen eines Makros - Animiertes Diagramm in Excel

Was ich tun möchte, ist das Diagramm zu aktualisieren VBA es wie eine Animation zu machen. Lassen Sie uns diesen (Pseudo-) Code unten haben;

Option Explicit 

#If VBA7 And Win64 Then 
    '64 bit Excel 
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (_ 
     ByVal dwMilliseconds As Long) 
#Else 
    '32 bit Excel 
    Public Declare Sub Sleep Lib "kernel32" (_ 
     ByVal dwMilliseconds As Long) 
#End If 

Sub Animate() 

On Error GoTo Error ErrorHandler  

Dim wsh As Worksheet 
Dim i As Integer 

Set wsh = ThisWorkbook.Worksheets("AChart") 
Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 

For i = 1 to 3000 
    Sleep 50 
    wsh.Range("K4").Value = i 
    DoEvents 
    Application.Wait Now() + TimeSerial(0, 0, 1) 
Next i 

Exit Sub 
ErrorHandler: 
MsgBox Err.Description & " Procedure Animated Graph" 

End Sub 

Diese (insbesondere DoEvents) machen nicht die Grafik-Update auf dem Bildschirm. Ich wollte wissen, ob es einen Weg gibt, dies zu implementieren.

+2

Ihre beste Wette wäre 'Application.Otime'. "Sleep" und andere Sachen funktionieren nicht gut, weil VBA noch läuft, so dass es die Excel-Anwendung stört. Versuchen Sie 'Ontime' und sagen Sie uns, Sie wissen, wie man es benutzt;) –

+1

@ A.S.H Es hat funktioniert. Vielen Dank. – Masoud

Antwort

1

Application.OnTime kann für diesen Zweck verwendet werden. Andere Dinge wie DoEvents oder Sleep haben immer noch das Makro ausgeführt und das verhindert das Diagramm aktualisiert werden (auf dem Bildschirm).

Wie erstellt man einen dynamischen Graphen?

Zuerst im Interesse der Vollendung, das ist eine Verbindung, wie ein dynamisches Diagramm zu machen:

Dynamic Excel Charts

Hier erfahren Sie, auf eine Zelle beziehen und verwenden Offset (oder ähnliche Ansätze), um die Daten in Ihrem Diagramm zu ändern.

Wie automatisiert Änderungen im Diagramm?

Der folgende Code ist einer meiner frühen Versuche für die Automatisierung der Aktualisierung von Diagrammdaten (sogenannte "Animation"). Start und Finish sind zwei Command Buttons in dem Blatt, dass Benutzer den "Dynamic Graph" von ihnen steuern können. Sie können rund um spielen und Pause machen, usw., wie Sie benötigen, aber dies würde eine rohe Idee geben, wie dies umzusetzen:

Public laststop As Boolean 
Public i As Integer 

Sub start() 
    laststop = True 'This controls schedule in Application.Ontime 

    i = 1 'Reset the date to the first entry each time you press start 
    Call Animate 'calls the main sub 
End Sub 

Sub finish() 
    laststop = False 'Set the schedule to false to stop the macro 
End Sub 

'XXXXXXXXXXXXXXXXXXXX 
'XXX MAIN PROGRAM XXX 
'XXXXXXXXXXXXXXXXXXXX 

Sub Animate() 

On Error GoTo ErrorHandler 

Application.OnTime Now() + TimeSerial(0, 0, 2), "Animate", Schedule:=laststop 

If Not laststop Then GoTo nextline 

Dim wsh As Worksheet 

Set wsh = ThisWorkbook.Worksheets("Dynamic_Graph") 
Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 

wsh.Range("I34").Value = i + 1 
DoEvents 

i = i + 1 

If i > 200 Then laststop = False 'last data entry 


Exit Sub 

ErrorHandler: 

    'Sometimes after running the finish macro these errors are happening that _ 
    'we don't want users to see them as they don't affect the process 

If Err.Description = "The specified dimension is not valid for the current chart type" _ 
Or Err.Description = "Method 'OnTime' of object '_Application' failed" _ 
Then GoTo nextline 

MsgBox Err.Description & " #Procedure: Animated Graph" 

nextline: 
     laststop = False 

End Sub 

Dank @A.S.HOnTime für hindeutet.

Verwandte Themen