Clever-Excel-Forum

Normale Version: Eingabebereich nach Zeit-Verzögerung löschen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,
ist es möglich in dem nachfolgendem Code eine Zeit-Verzögerung einzubauen?
Ich habe einen Eingabebereich "M7:O8", dann soll  in "M9" nach 1 Sekunde Wartezeit der Bereich "M7:O8" gelöscht werden und der Cursor wieder zu "M7" gehen.
Vorher wurden die Werte über eine Tastatur eingegeben, nun habe ich die Eingabe auf Touch umgestellt.
Vielen Dank schon mal im Voraus.
Gruß Didi

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Static bolM9 As Boolean
  With Target.Cells()
    If .Address = "$M$9" Then
      If Application.WorksheetFunction.CountBlank(Range("M7:O8")) Then
        Application.EnableEvents = False
        Range("M7:O8").SpecialCells(xlCellTypeBlanks).Cells(1).Select
        Application.EnableEvents = True
      Else
        bolM9 = True
      End If
    Else
      If bolM9 Then
        bolM9 = False
        Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
        Range("M7:O8") = ""
        Range("M7").Select
      End If
    End If
  End With
End Sub
Hallo,
ich bin nicht super in VBA aber das könnte helfen.

Application.OnTime Now + TimeSerial(0, 0, 5)

Die 5 steht für Sekunden
Hallo,
Danke für dein bemühen, habe versucht den Code da an mehreren Stellen einzufügen.
Kommt immer Meldung "Fehler beim Kompilieren, Argument ist nicht optional"
Gruß Didi
Hallo,
sorry habe etwas vergessen.

1. Die Subs müssen in ein Modul, sonst laufen sie nicht.
2. Statt der MsgBox geht auch application.statusbar = ""    'Wenn Text zwischen den Anführungszeichen eingefügt ist, wird dieser in der Statusbar sichtbar
oder  Debug.Print "irendetwas"



Public Sub StartZeitGeber()
      Application.OnTime Now + TimeValue("0:0:3"), "TextInStatusbar"

End Sub



Private Sub TextInStatusbar()

         MsgBox Format(Now, "hh:nn:ss")

        'oder

        'application.statusbar = ""

       'oder

       'debug.print ...
End Sub
Hallo,
noch mal Danke erst mal.
Ich habe da echt kein Plan wo da was hin muss.
Den Code, den ich in meinem ersten Beitrag eingefügt habe der steht im Arbeitsblatt Leg1.(ist auch nicht mein Werk)
Soll der dann in irgendein Modul reinkopiert werden und Deine beiden Codes dazu???
Ich kenn mich eigentlich einigermaßen mit Excel aus, aber bei VBA bin ich noch blutiger Anfänger.
Ich dachte eher daran, das man da irgendetwas dazu schreibt, wie soll er sonnst wissen, das er in Zelle M9 1 Sekunde warten soll??
Gruß Didi
Hallo,
ich bin mal so frei und versuche mich daran.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Static bolM9 As Boolean
  With Target.Cells()
    If .Address = "$M$9" Then
        Call StartZeitGeber
      If Application.WorksheetFunction.CountBlank(Range("M7:O8")) Then
        Application.EnableEvents = False
        Range("M7:O8").SpecialCells(xlCellTypeBlanks).Cells(1).Select
        Application.EnableEvents = True
      Else
        bolM9 = True
      End If
    Else
      If bolM9 Then
        bolM9 = False
        Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
        Range("M7:O8") = ""
        Range("M7").Select
      End If
    End If
  End With
End Sub


Diesen CodeTeil in ein Modul einfügen. 
Nach dem Klick erhälst du "Modul 1" und dort fügst du beide SUB´s ein.
Dann dein Code wie immer benutzen.

[
Bild bitte so als Datei hochladen: Klick mich!
]

Public Sub StartZeitGeber()
      Application.OnTime Now + TimeValue("0:0:3"), "TextInStatusbar"
End Sub

Private Sub TextInStatusbar()
        Application.StatusBar = ""
End Sub



Gruß Mike
Hey, da bin ich mal wieder.

Habe mir mal die Zeit genommen und dein Code analysiert. (Soweit ich es kann)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Static bolM9 As Boolean

  With Target.Cells()
    If .Address = "$M$9" Then
           If Application.WorksheetFunction.CountBlank(Range("M7:O8")) Then
               Application.EnableEvents = False
               Range("M7:O8").SpecialCells(xlCellTypeBlanks).Cells(1).Select
               Application.EnableEvents = True
           Else
               bolM9 = True
          End If
    Else
      If bolM9 Then
        bolM9 = False
        Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
        Range("M7:O8") = ""
        Range("M7").Select
      End If
    End If
  End With
End Sub



Wenn ich das alles richtig verstehe:
1. Nach der Eingabe aller Werte im Bereich M7:O8 passiert noch nichts. Erst nach dem anklicken von Zelle M9
2. Wenn alle Werte vorhanden, dann bolM9 = true
3. bolM9 wird false
4. Blattschutz/Objektschutz wird aktiviert
5. Bereich M7:O8 wird gelöscht (mit nichts beschrieben)
6. Zelle M7 wird aktiviert zur Neueingabe
7. Damit nicht alles sofort gelöscht wird, sollte man die Zeitverzögerung vor Range("M7:O8") = "" einbauen
8. Da mir der Code als "Spaß" vorkommt sage ich mal "Herzlich willkommen!!!" 

Liebe Grüße Mike
Hallo nochmal,
das ganze ist für ein Dart-Cricket Spiel.
Spieler 1 Eingabe der Treffer in M7:O7 ; Spieler 2 M8:O8 diese Eingaben werden in die Spalte P8:P500 bzw Q8:Q500 übertragen.
Das alles was dann in der Spalte P und Q eingetragen wurde wird dann woanders benötigt, damit das Spiel funktioniert.
Vorher habe ich das über eine Funktastatur eingegeben, also die Wurfergebnisse die der jeweilige Spieler getroffen hat.
In Zelle M9 wurden dann die Eingaben M7:O8 wieder gelöscht für die nächste Runde usw.( nach Enter)
Nun habe ich ein Laptop mit Touch-Display,  deshalb sollen jetzt wenn der Cursor auf M9 ist, die Eingaben in den Zellen M7:O8 automatisch nach
ca.1 Sekunde gelöscht werden für die dann nächste Spielrunde.
Jetzt wird es erst gelöscht, wenn ich in M9 etwas eingebe und das möchte ich gerne mit dieser Zeit-Verzögerung vermeiden.
Es ist mit Sicherheit kein Scherz von mir.
Habe die komplette Datei auch Hochgeladen.
Gruß Didi
Moin,
OK so macht es dann Sinn.  Sorry für meine evtl. übertriebene Reaktion.

Fand es aber dennoch recht witzig, auch wenn es für mich keinen Sinn ergeben hat.
Knobeln macht halt Spaß :)

Die Datei habe ich nicht gesehen aber dennoch ist es so wie ich es geschrieben habe.
Für eine Zeitverzögerung musst du ja die Zelle um die es geht aktivieren, damit die Zeitverzögerung aktiv wird.
Ein Bild habe ich angefügt, wo der Code hinein soll.

Gruß Mike
Hallo,
mit irgendetwas komm ich hier nicht klar.
Diese beiden Codes hab ich in ein Modul reinkopiert, mal so und mal mit ("0:0:3") hinter Application.StatusBar = 
Public Sub StartZeitGeber()
      Application.OnTime Now + TimeValue("0:0:3"), "TextInStatusbar"
End Sub

Private Sub TextInStatusbar()
        Application.StatusBar = ""
End Sub


Den alten Code, da ist ja folgende Zeile dazugekommen :Call StartZeitGeber 
habe ich mal gelassen wo er vorher war, dann mal zusammen mit den beiden obigen Codes in ein Modul getan und dann auch mal alles dort reingetan wo der alte Code stand.
Das Programm mehrmals neu gestartet.
Aber leider passiert da nichts. 
Gruß Didi
Seiten: 1 2