Clever-Excel-Forum

Normale Version: eine Zahl in der Zeile automatisch hochzählen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen.

Eure Hilfe ist wieder mal gefragt  Angel

Ich brauche eine Makro wo die Zahl beim starten(aktivieren) sich automatisch hochzählt. z.B. Ich habe einen Behälter wo ich befüllen möchte(die Anzeige in der Zeile B5 ist = 0), jetzt möchte ich durch Makro Aktivierung den Wert bis bestimmten Wert hochzählen lasse, z.B. bis 50 in bestimmten Rhythmus, z.B.(+2) 0 - 2 - 4 - 6 .... 50

Ich habe eine Makro wo ich den Countdown starte und der Wert wird runtergezählt , aber jetzt brauche ich andersrum  von 0 bis 50..

Code:
Option Explicit

Private ldtmTimer As Date

Public Sub Timer_On()
    Timer_Off
    ldtmTimer = Now + TimeSerial(0, 0, 15)
    AnzeigeRestzeit
    Application.OnTime ldtmTimer, "Timer_Prozedur"
End Sub

Public Sub Timer_Off()
    On Error Resume Next
    Application.OnTime ldtmTimer, "Timer_Prozedur", , False
    On Error GoTo 0
    ldtmTimer = 0
    AnzeigeRestzeit bolStopp:=True
End Sub

Public Sub Timer_Prozedur()
    Timer_Off
    If ActiveSheet.Range("F15").Value < 50 Then
        MsgBox "<50"
    Else
        MsgBox ">=50"
    End If
End Sub

Sub AnzeigeRestzeit(Optional bolStopp As Boolean)
  Static datNextTime As Date
  If Not bolStopp Then
    With Range("A1")
      '.NumberFormat = "General"
      .Value = Application.RoundUp(Application.Min(0, Now - ldtmTimer) * -86400, 0)
    End With
    datNextTime = Now + TimeSerial(0, 0, 1)
    Application.OnTime datNextTime, "AnzeigeRestzeit", , True
  Else
    On Error Resume Next
    Application.OnTime datNextTime, "AnzeigeRestzeit", , False
    On Error GoTo 0
    datNextTime = 0
  End If
End Sub

ich habe schon versucht zu googeln, aber erfolglos.

Bin wirklich für jede Hilfe Dankbar  Angel

viele Grüße
Andre
Hallöchen,

im Prinzip

If Range("B5").Value < 50 Then Range("B5").Value = Range("B5").Value + 2
Hallo Andre,

vielen Dank für schnelle Antwort, aber das ist glaube ich nicht ganz was ich brauche oder verstehe ich was falsch  Angel

Wenn ich diese Code als Private Sub einsetze, dann wird mein Wert sofort auf 50 katapultiert, wenn ich als Modul einsetzte, dann wird der Wert bei jede Makroausführung um 2 erhöht bis ich 50 erreiche => soweit habe ich verstanden(ausprobiert). Tut mir leid, bin kein VBA-Profi  Angel

Ich möchte das der Wert von 0 bis z.B. 50 in +2 Schritten, aber langsamer, bzw. in 5-10 Sekunden steigt, dass man das auch sieht, dass der Wert sich verändert - keine Blitzveränderung  Blush

Z.B. 0 bis 50 in Sekundentakt(+2) ungefähr => 25 Sekunden... wenn (+5), dann ca 10 Sekunden. 

Ich hoffe, dass ich genauer erklären konnte  Blush

Viele Grüße
Andre
Hallöchen,

der Code muss in ein Makro, welches alle n Sekunden ausgeführt wird. Du hast z.B. jede Sekunde Dein Makro AnzeigeRestzeit, wo Du in A1 die Zeit einträgst.
Dort könnte der Code rein mit einer zusätzlichen Bedingung, dass bei der 50 Schluss ist. Das Makro muss danach ja nicht umsonst weiterlaufen.
Ich bin in Excel/VBA noch ziemlich Anfänger - lerne durch verschiedene Tutorials(bei Youtube) aber es dauert leider noch, da ich EXCEL erst vor 4-5 Monaten richtig kennengelernt habe.

Wenn du mir mein obenstehendes Makro verändern würdest, oder neues basteln, würde ich ich dir sehr Dankbar sein  :23:

P.S: Ich würde sogar Geld bezahlen, wenn jemand aus Baden-Württemberg(Kreis Freiburg-Karlsruhe) bereit wäre mir Unterstützung beim lernen(BVA-Grundbausteinen) geben würde  :23: Blush

Viele Grüße
Andre
Hallöchen,

insgesamt könnte das so aussehen, wenn ich Deinen Ursprungscode verwende. Ich hab da ein paar andere Namen verwendet, dadurch kann es unabhängig / zusätzlich zum bisherigen laufen.

Code:
Option Explicit

Sub Start()
Anzeige50
End Sub

Sub Anzeige50(Optional bolStopp As Boolean)
'Variablendeklaratione
Static datNextT As Date
'Wenn die Stop-Variable nicht wahr ist und der Zellinhalt B5 <50, dann
If Not bolStopp And Range("B5").Value < 50 Then
  'Zellinhalt B5 um 2 erhoehen
  Range("B5").Value = Range("B5").Value + 2
  'Zeit fuer naechsten Durchlauf festlegen, hier + 10 s
  datNextT = Now + TimeSerial(0, 0, 10)
  'Makro aufrufen nach festgelegter Zeit
  Application.OnTime datNextT, "Anzeige50", , True
'anderenfalls (Wenn die Stop-Variable nicht wahr ist und der Zellinhalt B5 <50, dann)
Else
  'Bei Fehler weiter mit naechster Programmanweisung
  On Error Resume Next
  'OnTime - Ablauf beenden
  Application.OnTime datNextT, "Anzeige50", , False
  'Fehlerbehandlung zuruecksetzen
  On Error GoTo 0
  'Zeit auf 0 setzen
  datNextT = 0
'Ende Wenn die Stop-Variable nicht wahr ist und der Zellinhalt B5 <50, dann
End If
End Sub
:23: :23: :23:

Vielen, vielen Dank!

Schnell und dazu noch mit Beschreibung - das ist genau das was ich brauche um die einzelne Schritte zu verstehen!  Blush

Vielen herzlichen Dank   :98:

Liebe Grüße
Andre
(02.11.2020, 20:59)schauan schrieb: [ -> ]Hallöchen,

insgesamt könnte das so aussehen, wenn ich Deinen Ursprungscode verwende. Ich hab da ein paar andere Namen verwendet, dadurch kann es unabhängig / zusätzlich zum bisherigen laufen.

Code:
Option Explicit

Sub Start()
Anzeige50
End Sub

Sub Anzeige50(Optional bolStopp As Boolean)
'Variablendeklaratione
Static datNextT As Date
'Wenn die Stop-Variable nicht wahr ist und der Zellinhalt B5 <50, dann
If Not bolStopp And Range("B5").Value < 50 Then
  'Zellinhalt B5 um 2 erhoehen
  Range("B5").Value = Range("B5").Value + 2
  'Zeit fuer naechsten Durchlauf festlegen, hier + 10 s
  datNextT = Now + TimeSerial(0, 0, 10)
  'Makro aufrufen nach festgelegter Zeit
  Application.OnTime datNextT, "Anzeige50", , True
'anderenfalls (Wenn die Stop-Variable nicht wahr ist und der Zellinhalt B5 <50, dann)
Else
  'Bei Fehler weiter mit naechster Programmanweisung
  On Error Resume Next
  'OnTime - Ablauf beenden
  Application.OnTime datNextT, "Anzeige50", , False
  'Fehlerbehandlung zuruecksetzen
  On Error GoTo 0
  'Zeit auf 0 setzen
  datNextT = 0
'Ende Wenn die Stop-Variable nicht wahr ist und der Zellinhalt B5 <50, dann
End If
End Sub
   
Hallo Andre und alle andere Mitglieder,

bin mit der Code auf Problem gestoßen und zwar:

habe diese Makro bei anderen Projekt eingesetzt und folgendes Problem kam hoch: z.B. Makro wird gestartet und geprüft, ob der Wert in der Zelle B5 unter 50 liegt, wenn nicht der Fall ist, dann wird mein Wert in der Zelle F5 um 2 erhöht bis der Wert in der Zelle B5 nicht über 50 liegt. Der Wert in der Zähle B5 ändert sich und bei jede Änderung wird wieder Abgefragt, ob der Wert über 50 liegt, wenn nicht dann wird wieder die Zelle F5 um +2 erhöht. somit mit bei jede Änderung(wenn die Bedienung nicht zutrifft) wird mein Wert in der Zelle F5 um 2 erhöht, bei nächste Abfrage +2 +2(schon um 4), dann +2 +2 +2 (schon um 6) usw.. 

Hoffentlich mein Problem ist verständlich. 

wenn ich die Abfrage erneut ausführe - wie kann ich dann die vorige  Abfrage stoppen, so dass die nur 1 mal ausgeführt wird und nicht 2-3-4- Fach(parallel) abläuft???

 Ich habe schon internet durchgesucht aber wurde nicht fündig wie ich aktuelle Makro stoppen kann bevor ich neue Abfrage ausführe!  Huh

Bitte um Hilfe!   Blush

LG Andre
Hallöchen,

nimm eine weitere, globale Variable wo Du den Start steuern kannst.

Option Explicit

Public boStart as Boolean

Code:
Sub Start()
If boStart = False Then
  boStart = True
  Anzeige50
End If
End Sub


Im Else-Zweig vom anderen Makro setzt Du die Variable auf False.
Hallo André,

vielen, vielen Dank!  :23: :100:

LG André  :15: