Microsoft Office Forum [ www.Office-Fragen.de ] >> READONLY <<
Microsoft Office 2003-2019 => Excel => Thema gestartet von: Lycaner am März 06, 2017, 17:04:35 Nachmittag
-
Hallo Zusammen,
ich wollte mal Fragen, ob man ein Diagrammverlauf simulieren kann. Ich wollte bei eine Präsentation ein Diagramm zeigen, bei dem die Kurven automatisch weiter laufen. Ich habe gedacht, dass man dafür eine VBA-Code verwendet, der z.b. alle 5 sec. Werte aus Tabelle 1 in die Tabelle 2 kopiert. Und in der Tabelle 2 stehen die Daten für das Diagramm. Das ganze sollte ca. 5 min laufen.
Und jetzt zur meiner Frage.
Ist das Möglich, dass man bei der if-Abfrage für jeden Durchgang eine 5 sec. Verzögerung einbaut. Wenn ja, könnte mir jemand ein Beispielcode zeigen?
Gruß
Lycaner
-
Hallo,
im VBA Code bräuchtest Du kein Kopieren usw., zu umständlich. Nur ein Timer, der einen Zellwert ändert
würde ausreichen. Dazu schaue Dir die Methode OnTime an oder google nach Beispielen.
Was die Daten betrifft: angenommen, Diagrammdaten sind in D1:F2. In diesen Zellen erstellst Du Dir eine
Formel, die per INDEX() die Werte aus einer anderen Tabelle holt. Die Spaltennummer in INDEX versetzt
Du um X Spalten, X steht in einer Zelle.
Gruß
-
Hallo Maninweb,
irgendwie verstehe ich die OnTime nicht so ganz. Wenn die Methode ein Code alle z.b. 2 sec wiederholt, nach welchen Kriterien wird es abgebrochen?
Also ich aber bis jetzt diese zwei Blocke zusammen gebastelt:
Public Sub StartZeit()
Application.OnTime Now + TimeValue("00:00:02"), "Daten"
End Sub
Sub Daten()
Dim Zeit As String
Zeit = Right(Now(), 8)
Sheets("Tabelle2").Select
ActiveSheet.Cells(3, 1).Select
ActiveCell.FormulaR1C1 = Zeit
Selection.NumberFormat = "hh:mm:ss"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=INDEX(R[1]C[8]:R[34]C[8],1,1)"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=INDEX(R[1]C[8]:R[34]C[8],1,1)"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=INDEX(R[1]C[8]:R[34]C[8],1,1)"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=INDEX(R[1]C[8]:R[34]C[8],1,1)"
ActiveCell.Offset(1, -4).Select
End Sub
Aber das funktioniert nicht. Das liegt vermutlich daran, dass ich immer wieder die gleiche Zeile auswähle oder? Wie kann ich es umgehen?
-
Hallo,
in meinem Beitrag hatte ich etwas anderes gemeint. Nicht die Formeln per Code.
Habe Dir mal ein Beispiel erstellt, siehe Tabelle Besipiel. Den Timer killst Du wie
dort angegeben.
Gruß
-
Danke für den Beispiel,
leider ist es nicht ganz, was ich mir vorgestellt habe. Ich wollte eine xy-Diagramm verwenden und auf der x-Achse sollte die aktuelle Zeit abgebildet werden. Und mit deinem Beispiel ist das leide nicht möglich oder?
-
Hallo,
das Beispiel ist nur ein Beispiel. Du kannst jedes beliebiges Diagramm verwenden. Es geht in dem Beispiel darum aufzuzeigen,
wie Du per Formel anhand des Wertes in A1 in einen Datenbereich ziehst =INDEX(Datentabelle;$A$1+I3;1) in Spalte J z.B.
Dadurch, dass Du den Wert in A1 über die Zeit änderst, animierst Du das Diagramm.
Damit das für Dich geht, organisiere Deine Daten in ähnlicher Form wie bei mir (Spalte M und N). Lege Dir für Deine Daten
dann einen Bereich an, worauf sich das Diagramm (egal welches) bezieht und verknüpfe das per Formel zum Ausschnitt
der Gesamtdaten. Plus der Code.
Gruß
-
Vielen Dank Maninweb.
Könntest du mir vielleicht diesen Teil des Codes "Datentabelle;$A$1+I3;" erklären. Datentabelle ist doch Array, wo die Daten liegen aber was bezweckt man mit $A$1+I3 ?
Gruß
Lycaner
-
Hallo,
in J3 steht =INDEX(Datentabelle;$A$1+I3;1)
Datentabelle ist ein benannter Name, der sich auf den Bereich Beispiel!$M$3:$N$999 bezieht.
Statt des Namens kannst Du auch direkt den Bereich nehmen.
A1 ist der Wert, der per Code hochgezählt wird. In Spalte I hast Du nur laufende Zahlen 1 bis N,
je nachdem wieviele Datensätze ins Diagramm kommen.
Die Funktion INDEX kannst Du in der Hilfe nachschauen.
Gruß