Frage von hanshuberplayer, 52

Wie addiere ich in einem Zeitintervall eine Zelle zu einer anderen mittels VBA (Excel)?

Hi, ich hoffe, mir kann jemand weiterhelfen.

Wie kann ich in Excel eine Zelle alle 2 Sekunden zu einer anderen addieren? Nach 10 Additionen soll es aufhören, zu addieren.

Beispiel: Ich habe in B1 einen Wert, der alle 2 Sekunden zum Wert in A1 addiert wird. Dabei soll B1 10 mal hinzu addiert werden.

MfG Hans

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von PWolff, 37

Wenn es dir nichts ausmacht, dass die Excel-Datei während des Programmlaufs nicht reagiert:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub CommandButton1_Click()
CommandButton1.Enabled = False 'Verhindere Mehrfachauslösung des Zählens
Me.Range("A1").Value = 0 'Zurücksetzen
For i = 1 To 10
Me.Range("A1").Value = Me.Range("A1").Value + Me.Range("B1").Value 'Addieren
Sleep 2000 '2 Sekunden Pause
Next
CommandButton1.Enabled = True 'Gib das Zählen wieder frei
End Sub

 Wenn die Datei in der Zeit noch reagieren soll, wäre ein Timer-Steuerelement am sinnvollsten. Du kannst zwar DoEvents einsetzen, aber sobald du z. B. den Inhalt einer (auch unbeteiligten) Zelle änderst, stoppt das Programm. (Jedenfalls bei der Excel-Version, die ich hier habe.)

(Woher man so ein Timer-Element in VBA bekommt, muss ich mal nachsehen.)

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 26
Sub AddiereZeitgesteuert()
  Dim dtStart
  Dim dtJetzt
  Dim iSek
  Dim iTick

dtStart = Now() dtJetzt = Now()
iSek = Second(dtJetzt) iTick = 0 While iTick < 20 If iSek + 2 = Second(dtJetzt) Then iSek = Second(dtJetzt) iTick = iTick + 1 If iTick Mod 2 = 0 Then Range("A1").Value = Range("A1").Value + Range("B1").Value Debug.Print iTick End If End If dtJetzt = Now() Wend Debug.Print "Fertig" End Sub
Kommentar von Suboptimierer ,

Irgendwo ist glaube ich noch etwas doppelt gemoppelt :/

Nimm das mal zunächst nur als Anregung.

Kommentar von Suboptimierer ,

Ich habe noch etwas Nettes gefunden:

Sub WaitTest()
  MsgBox("This application is started!")
  Application.Wait (Now + TimeValue("0:00:10"))
  MsgBox("Excecution resumed after 10 Seconds")
End Sub

Quelle: http://stackoverflow.com/questions/1544526/how-to-pause-for-specific-amount-of-t...

Expertenantwort
von Ninombre, Community-Experte für Excel, 22
Sub kl()
Dim PauseTime, Start
For i = 1 To 10
PauseTime = 2 ' Set duration.
Start = Timer ' Set start time.
Do While Timer < Start + PauseTime
DoEvents ' Yield to other processes.
Loop
Tabelle1.Cells(1, 1).Value = Tabelle1.Cells(1, 1).Value + Tabelle1.Cells(1, 2).Value
Next
End Sub

Aber es erschließt sich mit nicht ganz was Du damit vorhast

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten