Eseguire macro a tempo



  • Eliminare input box dopo x sec
    di Ilkamalo (utente non iscritto) data: 29/07/2009


    nel contesto di una macro ho il codice sotto scritto
    io avrei necessita che se non viene premuto il tasto ok (non c'è l'operatore al pc), nei seguenti 30 sec la macro continuasse col valore del campo di default, come fosse stato premuto ok, qualcuno saprebbe darmi una mano

     
    ...
    datainput = Format(Date, "ddd dd/mm/yy")
        datadati = InputBox("scrivi la data dell'aggiornamento nel formato" & vbCrLf & _
         "ddd dd/mm/yy", "INSERIRE LA DATA", datainput)
    ...



  • di Baz (utente non iscritto) data: 29/07/2009

    Ciao,
    personalmente risolverei il tuo problema con una userfom, con al suo interno:
    n°1 casella di testo (textbox1)
    n°1 pulsante (commandbutton1)

    visivamente è molto simile ad un inputbox ma la macro può continuare la sua esecuzione e quindi il time attivato, fa il suo dovere

    vedi se può andarti bene

    ciao
     
    ' nella USERFORM **********
    
    Private Sub CommandButton1_Click()
    StopTimer
    Unload UserForm1
    
    datainput = TextBox1.Value
    
    End Sub
    
    Private Sub TextBox1_Change()
    Check = 1
    CheckUse
    End Sub
    
    Private Sub UserForm_Activate()
    
    Check = 1
    CheckUse
    
    TextBox1 = Format(Date, "ddd dd/mm/yy")
    datainput = TextBox1.Value
    
    End Sub
    
    ' in un  MODULO **********
    Public TimeDelay As Double, Check As Integer
    Public datainput
    
    Function StartTimer()
    TimeDelay = Now + TimeSerial(0, 0, 20)
    
    Application.OnTime EarliestTime:=TimeDelay, Procedure:="CheckUse", Schedule:=True
    Check = 0
    End Function
    
    Function CheckUse()
    If Check = 1 Then
        StartTimer
    Else
        StopTimer
        Unload UserForm1
        Check = 3
    End If
    End Function
    
    Function StopTimer()
    On Error Resume Next
    Application.OnTime EarliestTime:=TimeDelay, Procedure:="CheckUse", Schedule:=False
    End Function



  • di Baz (utente non iscritto) data: 29/07/2009

    ... dimenticavo, per i tuoi 30 secondi modifica ocme segue
     
    TimeDelay = Now + TimeSerial(0, 0, 30)
    



  • di Baz (utente non iscritto) data: 29/07/2009

    Ho dimenticato una parte di codice
    sorry
     
    ' macro da lanciare
    
    Sub LancioForm()
    
    UserForm1.Show
    
    If Check = 3 Then
        MsgBox "valore forzato da sistema = " & datainput
    Else
        MsgBox "valore inserito da utente = " & datainput
    End If
    
    End Sub