Celle Lampeggianti



  • Celle Lampeggianti
    di pero13 (utente non iscritto) data: 28/08/2013 13:48:19

    Ciao,
    via allego una macro che potrebbe essere utile a chi vuole far lampeggiare le celle indipendentemente dal contenuto.
    Il funzionamento è buono per quel che ho potuto constatare, ma sinceramente il codice ( da me modificato a partire da un precedente pubblicato sul web) mi sembra piuttosto spartano...voi cosa ne pensate?
     
    Sub Flash()
    Dim Nexttime
    Nexttime = Now + TimeValue("00:00:01")
    
    With ActiveWorkbook.Worksheets("Foglio1").Range("A1,A3,A5,A9").Interior
    
    If .ColorIndex = 2 Then .ColorIndex = 7 Else .ColorIndex = 2
    End With
    
    Application.OnTime Nexttime, "Flash"
    End Sub
    
    
    
    



  • di totygno71 (utente non iscritto) data: 28/08/2013 15:29:28

    Ciao

    se cerchi nello stroico la parola "LAMPEGGIA" trovi una discussioneriguardante il tuo caso brillantemente risolta (strano ma vero) da VF



  • di pero13 (utente non iscritto) data: 28/08/2013 16:45:46

    Grazie, ma ho preferito usare il mio codice per comodità/semplicità. Ora però è sorto un'altro problema.

    Come potrete vedere nel file, ho inserito un pulsante il quale lancia la Macro e fa lampeggiare le celle. Purtroppo però non riesco a trovare un modo per fermare il lampeggio, dato che se rischiaccio il medesimo pulsante Excel inizia a sbarellare e le celle diventano compulsive.
    Inoltre quando chiudo il foglio Excel ( non il programma ) , dopo la finestra del salvataggio si riapre automaticamente e senza alcun senso il foglio appena chiuso.

    Qualcuno sà come poter fermare il lampeggio e aggiustare questo bug ? ( sono ben accette anche modifiche del codice realizzato per il lampeggio)

    grazie in anticipo
     
    Sub Commandbutton1_click()
    
    Dim Nexttime
    Nexttime = Now + TimeValue("00:00:01")
    
    With ActiveWorkbook.Worksheets("Foglio1").Range("A1,A3,A5").Interior
    If .ColorIndex = 2 Then .ColorIndex = 7 Else .ColorIndex = 2
    End With
    
    With ActiveWorkbook.Worksheets("Foglio1").Range("A9").Interior
    If .ColorIndex = 2 Then .ColorIndex = 4 Else .ColorIndex = 2
    End With
    
    With ActiveWorkbook.Worksheets("Foglio1").Range("A12,a15").Interior
    If .ColorIndex = 2 Then .ColorIndex = 4 Else .ColorIndex = 2
    End With
    
    Application.OnTime Nexttime, "Commandbutton1_click"
    
    End Sub
    
    



  • di pero13 (utente non iscritto) data: 29/08/2013 14:32:08

    Ho così modificato il codice per risolvere parte dei problemi di cui vi accennavo. Ora però c'è una piccola questione da limare. Come potrete vedere nella versione 3.0, quando si lancia la macro con il mio bel pulsantino funziona tutto alla perfezione, se non fosse che se per esempio ho un'altro file di excel aperto, lampeggiano ( fastidiosamente) anche le celle di quel file!


    Mi potrebbe aiutare qualcuno a risovlere questo problemino?
     
    Private NextFlash As Double
    
    Sub StartFlashing()
    If Range("A2,A4").Interior.ColorIndex > 0 Then
    Range("A2,A4").Interior.ColorIndex = xlColorIndexNone
    Else
    Range("A2,A4").Interior.ColorIndex = 8
    End If
    NextFlash = Now + TimeSerial(0, 0, 1)
    Application.OnTime NextFlash, "ThisWorkbook.StartFlashing", , True
    End Sub
    Sub StopFlashing()
    Range("A2,A4").Interior.ColorIndex = xlColorIndexNone
    Application.OnTime NextFlash, "ThisWorkbook.StartFlashing", , False
    End Sub
    Private Sub Workbook_Open()
    ThisWorkbook.StartFlashing
    End Sub
    Private Sub Workbook_Close()
    ThisWorkbook.StopFlashing
    End Sub
    
    



  • di Vecchio Frac data: 29/08/2013 19:39:24

    Ti basterà qualificare compiutamente i Range interessati.
    Propongo l'esempio solo per la prima occorrenza, aggiusta tu il resto.

    @totygno
    cit. "brillantemente risolta (strano ma vero) da VF"
    ---> non ho parole ^_^
     
    Sub StartFlashing()
    If ActiveWorkBook.Sheets("Foglio1").Range("A2,A4").Interior.ColorIndex > 0 Then






  • di pero13 (utente non iscritto) data: 30/08/2013 09:32:47

    Ciao Vecchio Frac, seguendo il tuo consigglio ho qualificato i range ( file allegato "Celle Lampeggianti v 4.0") e si è risolto il problema delle celle lampeggianti in altri fogli excel!
    L'unico neo che permane è dovuto al fatto che se non fermo la macro, quando chiudo il foglio excel (non il programma) si riapre in automatico il foglio stesso.
    Quindi, o fermo ogni volta la macro prima di chiudere il foglio ( il che è cmq fattibilissimo) oppure sono costretto a chiudere proprio Excel ( se però lavoro su più foglii può essere fastidioso).

    Credo che il problema si dovuto a questa parte di codice, ma non saprei come aggiustarlo:

    "Private Sub Workbook_Open()
    ThisWorkbook.StartFlashing
    End Sub"

    Idee?
     
    Private NextFlash As Double
    
    Sub StartFlashing()
    
    If ActiveWorkbook.Sheets("Foglio1").Range("A2,A4").Interior.ColorIndex > 0 Then
    
    ActiveWorkbook.Sheets("Foglio1").Range("A2,A4").Interior.ColorIndex = xlColorIndexNone
    Else
    ActiveWorkbook.Sheets("Foglio1").Range("A2,A4").Interior.ColorIndex = 8
    End If
    NextFlash = Now + TimeSerial(0, 0, 1)
    Application.OnTime NextFlash, "ThisWorkbook.StartFlashing", , True
    End Sub
    
    Sub StopFlashing()
    ActiveWorkbook.Sheets("Foglio1").Range("A2,A4").Interior.ColorIndex = 8 'xlColorIndexNone
    Application.OnTime NextFlash, "ThisWorkbook.StartFlashing", , False
    End Sub
    
    Private Sub Workbook_Open()
    ThisWorkbook.StartFlashing
    End Sub
    
    Private Sub Workbook_Close()
    ThisWorkbook.StopFlashing
    End Sub
    
    



  • di Vecchio Frac data: 30/08/2013 11:50:23

    cit. "quando chiudo il foglio excel (non il programma) si riapre in automatico il foglio stesso. "
    ---> Sì, perchè rimane il riferimento alla cartella di lavoro che contiene la macro di lampeggio.
    Non basta neanche intercettare l'evento Deactivate del foglio stesso perchè il riferimento è al Workbook originale. Aprire un workbook nuovo non risolve il problema (anzi fa lampeggiare anche quelle celle).
    Va ripensata un po' l'architettura della macro.






  • di pero13 (utente non iscritto) data: 30/08/2013 12:04:24

    Esattamente come pensavo/temevo.
    Se rinunciassi all'attivazione automatica della macro all'apertura del file, si potrebbe risolvere il problema?



  • di Vecchio Frac data: 30/08/2013 12:09:31

    Io ho risolto così. In un modulo separato.
    Il problema adesso è diverso: se cambio cartella di lavoro (apro un file nuovo o premo Ctrl-F6) la macro di lampeggio si arresta. Inoltre il file che contiene la macro di lampeggio deve per forza avere un nome che comincia con "celle". Tutto troppo accrocchiato.
    La prossima soluzione perciò deve ricorrere alle API SetTimer e KillTimer e così non avrai più problemi :)
     
    Option Explicit
    
    Sub start_timer()
        Application.OnTime EarliestTime:=Now + TimeSerial(0, 0, 1), Procedure:="blink", Schedule:=True      'ogni secondo parte "blink"
    End Sub
    
    Sub blink()
        If LCase(Left(ActiveWorkbook.Name, 5)) <> "celle" Then Debug.Print "exiting": Exit Sub
        With Sheets("Foglio1").[A2,A4].Interior
            If .ColorIndex = 8 Then
                .ColorIndex = xlColorIndexNone
            Else
                .ColorIndex = 8
            End If
        End With
        start_timer
    End Sub
    
    Sub stop_timer()
        On Error Resume Next
        Application.OnTime EarliestTime:=Now + TimeSerial(0, 0, 1), Procedure:="blink", Schedule:=False         'stop procedura "blink"
        Sheets("Foglio1").[A2,A4].Interior.ColorIndex = xlColorIndexNone
    End Sub
    






  • di Vecchio Frac data: 30/08/2013 13:15:05

    Tornato dal pranzo, a pancia piena si ragiona meglio ^_^
    Pilotando gli eventi attiva e disattiva del foglio con le celle lampeggianti ottengo il risultato finale, cioè che tornando su medesimo foglio il lampeggio riprende ^_^
     
    'in thisworkbook del foglio con le celle lampeggianti
    Private Sub Workbook_Activate()
        start_timer
    End Sub
    
    Private Sub Workbook_Deactivate()
        stop_timer
    End Sub
    






  • di pero13 (utente non iscritto) data: 30/08/2013 13:50:41

    Tornato dal pranzo, a pancia piena ci si abbiocca meglio! ;)

    cmq, questa storia é un cane che si morde la coda...il problema che avveniva alla chiusura del foglio è risolto, ma l'istruzione :

    "Private Sub Workbook_Activate()
    StartFlashing
    End Sub"

    Credo faccia si che quando nello stesso workbook passo dal mio foglio con le celle lampeggianti ad un'altro foglio excel, mi esca quest'errore : " Indice non incluso nell'intervallo".

    Giustamente, il sistema non trova nel 2° file il foglio "Foglioprova" contenuto nel primo!
    il Codice usato è qui sotto.


     
     Private NextFlash As Double
    
    Sub StartFlashing()
    
    If ActiveWorkbook.Sheets("Foglioprova").Range("A2,A4").Interior.ColorIndex > 0 Then
    
    
    ActiveWorkbook.Sheets("Foglioprova").Range("A2,A4").Interior.ColorIndex = xlColorIndexNone
    Else
    ActiveWorkbook.Sheets("Foglioprova").Range("A2,A4").Interior.ColorIndex = 8
    End If
    NextFlash = Now + TimeSerial(0, 0, 1)
    Application.OnTime NextFlash, "ThisWorkbook.StartFlashing", , True
    End Sub
    Sub StopFlashing()
    ActiveWorkbook.Sheets("Foglioprova").Range("A2,A4").Interior.ColorIndex = 8 'xlColorIndexNone
    Application.OnTime NextFlash, "ThisWorkbook.StartFlashing", , False
    End Sub
    
    
    Private Sub Workbook_Activate()
        StartFlashing
    End Sub
    
    Private Sub Workbook_Deactivate()
        StopFlashing
    End Sub