Orologio Digitale su cella

Anonimo
2011-01-02T16:21:25+00:00

Buon Giorno, quando la leggerete.

Lavoro con Excel 2007 con più cartelle. Facendo delle ricerche ho trovato 2 modi per avere l'ora in una cella che si aggiorna ogni secondo. Sul Foglio1 di Excel ho inserito 2 pulsanti ai quali sono abbinati sul relativo foglio VBA:

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False

ActiveSheet.Unprotect

    Range("C1").FormulaR1C1 = "1"

    Orologio

ActiveSheet.Protect

Application.ScreenUpdating = True

End Sub

Private Sub CommandButton2_Click()

Application.ScreenUpdating = False

ActiveSheet.Unprotect

    Range("C1").FormulaR1C1 = "0"

ActiveSheet.Protect

Application.ScreenUpdating = True

End Sub

Sul Foglio Excel ho inserito un controllo =SE(....) che dovrebbe avviare o fermare l'rologio.

Sul Modulo1 ho 2 soluzioni:

A)

Sub Orologio()

If ThisWorkbook.Worksheets("Pannello").Range("E2").Value = "X" Then Exit Sub

ThisWorkbook.Worksheets("Pannello").Range("E2").Value = Format(Now, "hh:mm:ss")

Application.OnTime Now + TimeSerial(0, 0, 1), "Orologio"

End Sub

Parte, si mantiene anche quando apro altri fogli o cartelle ma non si ferma.

B)

Public Sub Orologio()

    If Range("C2") = 1 Then

    Worksheets(1).Cells(2, 5).Value = Format(Now, "hh:mm:ss")

    Application.OnTime (Now + TimeSerial(0, 0, 1)), "Orologio"

    End If

End Sub 

Questa si ferma con il comando del pulsante ma si ferma anche quando apro un foglio o una cartella.

A me serve che obbedisca ai comandi o comtrolli come la B ma si mantenga attiva come la A.

Grazie fi da adesso.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2011-01-05T15:35:37+00:00

Mi spiace se l'hai presa male. Comprendo che per gli esperti di VBA quello che affermi sia fattibile, nelle ricerche fatte ho visto cose che mai avrei pensato esistessero. Io non sono molto esperto e quindi tutte le volte che posso preferisco utilizzare delle logiche Booleane sul foglio Excel che non mi chiedono di approfondire il VBA, concettualmente e sbagliato ma spesso la necessità di una soluzione in tempi brevi mi impone di utilizzare al meglio quello che conosco rimandando a tempi migliori o a quando non potrò fare diversamente le altre soluzioni. Per quanto riguarda la formula postata per ultimo funziona se sul foglio Excel sulla cella C2 scriviamo per esempio:=SE(E(C1=1;'[1-DDE.xlsm]DDE'!$AB$16=0;'[1-DDE.xlsm]DDE'!$AB$30=1);1;0) che controlla il valore di imput anche dalla applicazio 1-DDE. Se questo non importa è sufficente che Public Sub Orologio() faccia riferimento alla cella C1 al posto della cella C2.

Cordialmente saluto.

La risposta è stata utile?

0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-01-03T20:18:05+00:00

    Grazie: La macro funziona correttamente ma non ha controlli esterni. Visto che altre applicazioni dipendono da essa e l'avvio o la chiusura possono dipendere da altre condizioni ho trovato il modo di farla con controllo sul foglio di Excel. Sul foglio VB scrivo: 

    Private Sub CommandButton1_Click()

        Range("C1").FormulaR1C1 = "1"

        Orologio

       

    End Sub

    Private Sub CommandButton2_Click()

        Range("C1").FormulaR1C1 = "0"

       

    End Sub

    mentre sul modulo scrivo:

    Public Sub Orologio()

    If ThisWorkbook.Worksheets("Pannello").Range("E2").Value = "X" Then Exit Sub

    ThisWorkbook.Worksheets("Pannello").Range("E2").Value = Format(Now, "hh:mm:ss")

    If ThisWorkbook.Worksheets("Pannello").Range("C2") = "0" Then Exit Sub

    Application.OnTime Now + TimeSerial(0, 0, 1), "Orologio"

    End Sub

    In questo modo ho un controllo start stop da qualsiasi foglio di qualsiasi cartella che agisce sulla cella C2

    Cordiali saluti.

    Le macro che ho postato hanno tutti i controlli esterni che vuoi tu, sei tu che sai quali usare nel tuo contesto. Puoi richiamarle da un evento del workbook/foglio/fogli, da un pulsante o da un tasto di scelta rapida, iserire il codice in un add-in, nel PERSONAL.XLS, in una ActiveX DLL. Le macro fanno esattamente quanto hai chiesto, come scritto, devi modificare i riferimenti per il tuo contesto. Quello che hai postato tu, non fa quanto affermi.


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-01-03T16:47:19+00:00

    Grazie: La macro funziona correttamente ma non ha controlli esterni. Visto che altre applicazioni dipendono da essa e l'avvio o la chiusura possono dipendere da altre condizioni ho trovato il modo di farla con controllo sul foglio di Excel. Sul foglio VB scrivo: 

    Private Sub CommandButton1_Click()

        Range("C1").FormulaR1C1 = "1"

        Orologio

    End Sub

    Private Sub CommandButton2_Click()

        Range("C1").FormulaR1C1 = "0"

    End Sub

    mentre sul modulo scrivo:

    Public Sub Orologio()

    If ThisWorkbook.Worksheets("Pannello").Range("E2").Value = "X" Then Exit Sub

    ThisWorkbook.Worksheets("Pannello").Range("E2").Value = Format(Now, "hh:mm:ss")

    If ThisWorkbook.Worksheets("Pannello").Range("C2") = "0" Then Exit Sub

    Application.OnTime Now + TimeSerial(0, 0, 1), "Orologio"

    End Sub

    In questo modo ho un controllo start stop da qualsiasi foglio di qualsiasi cartella che agisce sulla cella C2

    Cordiali saluti.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-01-02T17:47:26+00:00

    Buon Giorno, quando la leggerete.

    Lavoro con Excel 2007 con più cartelle. Facendo delle ricerche ho trovato 2 modi per avere l'ora in una cella che si aggiorna ogni secondo.

    <cut>

    Grazie fi da adesso.

    Prova, in un modulo standard:

    Dim bln As Boolean

    Public Sub mStart()

        bln = True

        Call mTimer

    End Sub

    Public Sub mStop()

        bln = False

    End Sub

    Public Sub mTimer()

        If bln = True Then

            Application.OnTime Now + TimeValue("00:00:01"), "mOra"

        End If

    End Sub

    Public Sub mOra()

        Dim sh As Worksheet

        Set sh = ThisWorkbook.Worksheets("Foglio1")

        DoEvents

        sh.Range("A1").Value = Format(Now, "hh:mm:ss")

        Set sh = Nothing

        Call mTimer

    End Sub

    Cambia i riferimenti con i tuoi. mStart fa partire il tutto, mStop lo stoppa. Ovviamente avrai un ritardo per tutte le altre cose, il processore una volta al secondo deve aggiornare Excel...


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento