cella lampeggiante



  • cella lampeggiante
    di NELLABOTTE data: 15/01/2015 16:22:41

    Salve, ho bisogno di un aiuto. Ho visto una risposta che suggeriva questa macro per far lampeggiare la cella A1. (inserire in un modulo)

    Option Explicit

    Public RunWhen As Double
    Public Const cRunIntervalSeconds = 1 'secondi
    Public Const cRunWhat = "blink_arrow"

    Sub start_timer()
    RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=True
    End Sub

    Sub blink_arrow()
    ActiveSheet.[A1] = IIf(ActiveSheet.[A1] = "", "blinking", "")
    start_timer
    End Sub

    Sub stop_timer()
    On Error Resume Next
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False
    ActiveSheet.[A1] = ""
    End Sub

    Ho fatto ed in effetti funziona benissimo.
    Ma quanto salvo e riapro il lavoro la cella non lampeggia più. e devo rilanciare la macro manualmente.
    Invece io vorrei che all'apertura del file la cella lampeggiasse sempre.
    Come posso fare?
    So che avete già trattato il problema, ma non sono affatto esperta di VBA e non riesco a risolvere da sola.
    Grazie a tutti per l'aiuto
     
    Option Explicit
    
    Public RunWhen As Double
    Public Const cRunIntervalSeconds = 1    'secondi
    Public Const cRunWhat = "blink_arrow"
    
    Sub start_timer()
        RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
        Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=True
    End Sub
    
    Sub blink_arrow()
        ActiveSheet.[A1] = IIf(ActiveSheet.[A1] = "", "blinking", "")
        start_timer
    End Sub
    
    Sub stop_timer()
        On Error Resume Next
        Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False
        ActiveSheet.[A1] = ""
    End Sub
    



  • di Vecchio Frac data: 15/01/2015 16:30:45

    Oggi riscriverei quel codice sostituendo i riferimenti alle parentesi quadre con i Range espliciti (grazie a scossa che mi ha illustrato un giorno il difetto nell'usare le quadre non per valutarne l'espressione ma come semplice riferimento).

    Perciò (visto che sono l'autore di quelle poche righe di codice) ti consiglio di sostituire tutti i riferimenti a [A1] scrivendoli come Range("A1").

    Ciò premesso quello che chiedi tu è facile perchè basta che metti il codice seguente nell'area codice di ThisWorkbook (o Questa_cartella_di_lavoro nell'orribile italianizzazione di Excel).

    (nel codice originale la procedura si chiama blink_arrow perchè avevo messo in cella A1 una freccia con un carattere Wingdings e questo rendeva bene l'idea della freccia lampeggiante in A1).
     
    Option Explicit
    
    Private Sub Workbook_Open()
        Call start_timer
    End Sub





  • grazie
    di NELLABOTTE data: 16/01/2015 15:39:05

    Ciao, grazie per l'aiuto.
    Ora funziona, ma funziona su tutti i fogli che apro, io invece vorrei che funzionasse solo su alcuni fogli (es foglio 1 e foglio 3)
    Come posso fare?



  • di Mister_x (utente non iscritto) data: 16/01/2015 16:24:37

    ciao

    Modifica alle sub()

    ciao
     
    Option Explicit
    
    Public RunWhen As Double
    Public Const cRunIntervalSeconds = 1    'secondi
    Public Const cRunWhat = "blink_arrow"
    
    Sub start_timer()
        RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
        Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=True
    End Sub
    
    Sub blink_arrow()
        Sheets("foglio1").[A1] = IIf(Sheets("foglio1").[A1] = "", "blinking", "")
        Sheets("foglio3").[A1] = IIf(Sheets("foglio1").[A1] = "", "blinking", "")
        start_timer
    End Sub
    
    Sub stop_timer()
        On Error Resume Next
        Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False
        Sheets("foglio1").[A1] = ""
        Sheets("foglio3").[A1] = ""
    End Sub