Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Eingabebereich nach Zeit-Verzögerung löschen
#1
Photo 
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


Angehängte Dateien
.xls   CricketTouch.xls (Größe: 254,5 KB / Downloads: 3)
Antworten Top
#2
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
Antworten Top
#3
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
Antworten Top
#4
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
Antworten Top
#5
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
Antworten Top
#6
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
Antworten Top
#7
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
Antworten Top
#8
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
Antworten Top
#9
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


Angehängte Dateien Thumbnail(s)
   
[-] Folgende(r) 1 Nutzer sagt Danke an Mikely117 für diesen Beitrag:
  • DartDidi
Antworten Top
#10
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste