Login Registrati
Stai vedendo 25 articoli - dal 26 a 50 (di 51 totali)
  • Autore
    Articoli
  • #46060 Score: 0 | Risposta

    Ciao scossa.

    Questo che chiedi

    ma se apro il foglio, apporto una qualsiasi modifica, lo SALVO (da menu/icona) e poi lo chiudo (quindi nessun avviso) come va considerato?

    è da considerare.

    Con la soluzione di Alex non è inserita.

    Forse cliccando salva dal menù icona è da inserire una riga in più in accessi tipo "FATTO  MODIFICA" e poi anche se clicco no "CHIUSURA CON SALVATAGGIO"

     

    #46061 Score: 0 | Risposta

    Oscar
    Partecipante
      45 pts

      frank_ciccio ha scritto:

      Ciao scossa.

      Questo che chiedi

      ma se apro il foglio, apporto una qualsiasi modifica, lo SALVO (da menu/icona) e poi lo chiudo (quindi nessun avviso) come va considerato?

      è da considerare.

      Con la soluzione di Alex non è inserita.

      Forse cliccando salva dal menù icona è da inserire una riga in più in accessi tipo "FATTO  MODIFICA" e poi anche se clicco no "CHIUSURA CON SALVATAGGIO"

      Non è possibile salvarlo dal menu a tendina e chiudere senza nessun avviso , quando chiudi , da qualunque parte chiudi si apre la finestra di dialogo   salva  non salvare o annulla , sei obbligato a segliere una selezione

      #46062 Score: 0 | Risposta

      scossa
      Partecipante
        37 pts

        frank_ciccio ha scritto:

        ma se apro il foglio, apporto una qualsiasi modifica, lo SALVO (da menu/icona) e poi lo chiudo (quindi nessun avviso) come va considerato?

        è da considerare.

        La domanda era da intendersi: 

        ma se apro il foglio, apporto una qualsiasi modifica, lo SALVO (da menu/icona) e poi lo chiudo (quindi nessun avviso) come va considerato? "CHIUSURA" o "CHIUSURA CON MODIFICA" ? 

        O l'una o l'altra (chiusura o chiusura con modifica), personalmente non prendo in considerazione altre opzioni.

         

        #46063 Score: 0 | Risposta

        alexps81
        Moderatore
          55 pts

          Domanda....ma se utilizzo una variabile public boolena (nel mio esempio la chiamo bEdit) per controllare lo stato delle modifiche e del salvataggio del Workboook può risultare stressante per il Workbook stesso? Nel senso...ad ogni modifica si scatena l'aggiornamento di questa variabile: in apertura è False, se eseguo modifiche passa a True, se salvo ritorna a False.

          Il suo stato attuale andrà a decidere se scatenare la MsgBox per la richiesta di salvataggio delle modifiche (SI, NO, ANNULLA), oppure salvare direttamente e registrare come CHIUSURA (perché se bEdit è a False vuol dire che o non è stata effettuata nessuna modifica oppure è stato già salvato tramite menu a tendine/icona).

          Allego file con implementazione degli eventi: OpenWorkbook_AfterSaveWorkbook_SheetChange

          @scossa, @oscar....date un vostro parere al riguardo

          Allegati:
          You must be logged in to view attached files.
          #46065 Score: 0 | Risposta

          scossa
          Partecipante
            37 pts

            alexps81 ha scritto:

            @scossa, @oscar....date un vostro parere al riguardo

            Hmmm, non mi pare funzioni correttamente: lo apro e lo richiudo subito; lo riapro e non risultano registrate l'apertura e chiusura precedenti.

            Edit: ritiro quanto detto: non so come ma c'era Application.EnableEvents a False.

            Ricontrollo.

            Edit2: confermo che c'è un problema con Application.EnableEvents (probabilmente non lo riabiliti prima della chiusura).

             

            #46066 Score: 0 | Risposta

            Oscar
            Partecipante
              45 pts

              scossa ha scritto:

              Hmmm, non mi pare funzioni correttamente: lo apro e lo richiudo subito; lo riapro e non risultano registrate l'apertura e chiusura precedenti.

              Edit: ritiro quanto detto: non so come ma c'era Application.EnableEvents a False.

              Ricontrollo.

              Edit2: confermo che c'è un problema con Application.EnableEvents (probabilmente non lo riabiliti prima della chiusura).

               

              Si in effetti hai ragione , perchè con l'Edit  anche se scrivi qualcosa e salvi poi esci , non ti apre più la finestra di dialogo e non salva nulla

              Secondo mè si potrebbe disattivare il comando salva dal menu a tendina , in modo che anche se salvi , l'Editing rimane attivo , in questo modo all'uscita ti apre la finestra di dialogo salva

              #46067 Score: 0 | Risposta

              scossa
              Partecipante
                37 pts

                frank_ciccio ha scritto:

                Infatti c'è qualcosa da cambiare nel mio codice, che non riesco a fare

                N.B.: propedeutica al funzionamento di quanto segue è la creazione di 3 name

                • LastSave in cui si memorizza il "Last save time" vedi (*);
                • rAction in cui si memorizza l'"ultimo range valorizzato del registro" vedi (*);
                • Action in cui si memorizza l'"azione" vedi (*);

                All'apertura del file controllo il testo in colonna C dell'ultima riga del registro:

                • se non contiene "ACCESSO" registro l'accesso in una nuova riga;
                • se contiene "ACCESSO" registro una nuova riga con "CHIUSURA" mettendo la data dell'ultimo salvataggio del file e registro una nuova riga di "ACCESSO";

                Alla chiusura del file:

                • se il file NON è stato modificato aggiungo una riga al registro con "CHIUSURA" e salvo;
                • se il file è stato modificato e salvato aggiungo una riga al registro con "CHIUSURA CON MODIFICHE" e salvo;
                • se il file è stato modificato ma non salvato e chiudo:
                  • se all'avviso di salvare il file si risponde "Sì" allora aggiungo una riga al registro con "CHIUSURA CON MODIFICHE" e salvo;
                  • se all'avviso di salvare il file si risponde "No" allora il file si chiude e l'ultima riga non verrà salvata (resterà quindi la riga di "ACCESSO" che verrà chiusa all'apertura del file);

                  (*) creazione del nome "LastSave": in finestra immediata dare questo comando ThisWorkbook.Names.Add "LastSave", RefersTo:= Thisworkboook.BuiltinDocumentProperties(12)

                  (*) creazione del nome "rAction": in finestra immediata dare questo comando ThisWorkbook.Names.Add "rAction", RefersTo:=Foglio5.Range("An:Cn") dove n è l'ultima riga valorizzata del foglio Accessi;

                  (*) creazione del nome "Action": in finestra immediata dare questo comando ThisWorkbook.Names.Add "Action", RefersTo:="CHIUSURA") ;

                  Questo il codice da mettere nel modulo di ThisWorkBook (Questa_cartella_di_lavoro):

                  Private Sub Workbook_Open()
                    If [Action] = "CHIUSURA" And [rAction].Cells(1, 3) = "ACCESSO" Then
                      Me.Names("LastSave").RefersTo = Me.BuiltinDocumentProperties(12)
                      UpdateInfoSheet True
                    End If
                    Me.Names("Action").RefersTo = "ACCESSO"
                  '-----------------------------------------------------------------------------
                  'ACCESSI
                    Application.ScreenUpdating = False
                    Me.Names("LastSave").RefersTo = Now
                    UpdateInfoSheet True
                    Me.Names("Action").RefersTo = "CHIUSURA"
                    Me.Save
                    Application.ScreenUpdating = True
                  End Sub
                  
                  
                  Private Sub Workbook_BeforeClose(Cancel As Boolean)
                    Dim sAzione As String
                   'ACCESSI
                    If Me.Saved Then
                      sAzione = "CHIUSURA"
                      UpdateInfoSheet sAzione
                      Me.Save
                    Else
                      sAzione = "CHIUSURA CON MODIFICA"
                      UpdateInfoSheet sAzione
                    End If
                  End Sub
                  
                  
                  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
                    If [Action] = "ACCESSO" Then
                      Me.Names("Action").RefersTo = "CHIUSURA"
                    ElseIf [Action] = "CHIUSURA CON MODIFICA" And Not Me.Saved Then
                      UpdateInfoSheet True
                    End If
                  End Sub
                  
                  
                  Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
                    If Sh.Name <> "accessi" Then Me.Names("Action").RefersTo = "CHIUSURA CON MODIFICA"
                  End Sub
                  
                  
                  Private Sub UpdateInfoSheet(Optional bSave As Boolean) '(sAction As String)
                      Const iCOLUMN__ACTION   As Integer = 3
                      Const iCOLUMN__NAME     As Integer = 1
                      Const iCOLUMN__DATE     As Integer = 2
                      Const sACCESSI_SHEET       As String = "ACCESSI"
                      Const sPASSWORD         As String = "987654"
                  
                      Dim iNewRowNo           As Long
                      Dim vAct                As Variant
                      
                      With Sheets(sACCESSI_SHEET)
                        Application.EnableEvents = False
                        iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                        .Unprotect Password:=sPASSWORD
                        If [Action] <> "CHIUSURA CON MODIFICA" Then
                          iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                          If bSave Then
                            .Cells(iNewRowNo, iCOLUMN__NAME) = Application.UserName
                            .Cells(iNewRowNo, iCOLUMN__DATE) = CDate([LastSave])
                            .Cells(iNewRowNo, iCOLUMN__ACTION) = [Action]
                            Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                          Else
                            ReDim vAct(1 To 3)
                            vAct(1) = Application.UserName
                            vAct(2) = Now
                            vAct(3) = [Action]
                            Me.Names("rAccess").RefersTo = vAct
                          End If
                        Else
                          If bSave Then
                            vAct = [rAccess]
                            .Cells(iNewRowNo, iCOLUMN__NAME) = vAct(1)
                            .Cells(iNewRowNo, iCOLUMN__DATE) = vAct(2)
                            .Cells(iNewRowNo, iCOLUMN__ACTION) = vAct(3)
                            vAct(3) = "CHIUSURA CON MODIFICA"
                            Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                          Else
                            ReDim vAct(1 To 3)
                            vAct(1) = Application.UserName
                            vAct(2) = Now
                            vAct(3) = [Action]
                            Me.Names("rAccess").RefersTo = vAct
                          End If
                        End If
                        .Protect Password:=sPASSWORD, userinterfaceonly:=True
                        Application.EnableEvents = True
                      End With
                  End Sub

                  Allegato file modificato.

                  N.B.: dovrebbe funzionare correttamente, ma meglio verificare accuratamente.

                #46076 Score: 0 | Risposta

                Ciao scossa

                mi dà errore qui nel nuovo file

                Private Sub Workbook_BeforeClose(Cancel As Boolean)
                Dim sAzione As String
                'ACCESSI
                If Me.Saved Then
                sAzione = "CHIUSURA"
                UpdateInfoSheet sAzione

                non so se è colpa della versione di excel 2007

                #46077 Score: 0 | Risposta

                scossa
                Partecipante
                  37 pts

                  frank_ciccio ha scritto:

                  mi dà errore qui nel nuovo file

                  Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim sAzione As String
                  ...
                  UpdateInfoSheet sAzione

                  Ciao, 

                  purtroppo nel preparare il messaggio ho "contaminato" il codice con una versione precedente; in quella postata sAzione non è più utilizzato ed il parametro opzionale da passare a UpdateInfoSheet è un boolean che serve per scrivere direttamente la riga sul foglio accessi (True) altrimenti la memorizza in un array (False, default).

                  Purtoppo ora non posso sistemarlo, vedrò più tardi.

                  #46079 Score: 0 | Risposta

                  scossa
                  Partecipante
                    37 pts

                    scossa ha scritto:

                    Purtoppo ora non posso sistemarlo, vedrò più tardi.

                    Ho rivisto il codice, ora dovrebbe funzionare correttamente:

                    Private Sub Workbook_Open()
                      If [Action] = "CHIUSURA" And [rAction].Cells(1, 3) = "ACCESSO" Then
                        Me.Names("LastSave").RefersTo = Me.BuiltinDocumentProperties(12)
                        UpdateInfoSheet True
                      End If
                      Me.Names("Action").RefersTo = "ACCESSO"
                    '-----------------------------------------------------------------------------
                    'ACCESSI
                      Application.ScreenUpdating = False
                      Me.Names("LastSave").RefersTo = Now
                      UpdateInfoSheet True
                      Me.Names("Action").RefersTo = "CHIUSURA"
                      Me.Save
                      Application.ScreenUpdating = True
                    End Sub
                    
                    Private Sub Workbook_BeforeClose(Cancel As Boolean)
                      If [Action] = "CHIUSURA" Then
                        UpdateInfoSheet True
                        Me.Save
                      ElseIf [Action] = "CHIUSURA CON MODIFICA" Then
                        UpdateInfoSheet
                      End If
                    End Sub
                    
                    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
                      If [Action] = "ACCESSO" Then
                        Me.Names("Action").RefersTo = "CHIUSURA"
                      ElseIf [Action] = "CHIUSURA CON MODIFICA" And Not Me.Saved Then
                        UpdateInfoSheet True
                      End If
                    End Sub
                    
                    Private Sub UpdateInfoSheet(Optional bSave As Boolean) '(sAction As String)
                    
                        Const iCOLUMN__ACTION   As Integer = 3
                        Const iCOLUMN__NAME     As Integer = 1
                        Const iCOLUMN__DATE     As Integer = 2
                        Const sACCESSI_SHEET       As String = "ACCESSI"
                        Const sPASSWORD         As String = "987654"
                    
                        Dim iNewRowNo           As Long
                        Dim vAct                As Variant
                        
                        With Sheets(sACCESSI_SHEET)
                          Application.EnableEvents = False
                          iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                          .Unprotect Password:=sPASSWORD
                          If [Action] <> "CHIUSURA CON MODIFICA" Then
                            iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                            If bSave Then
                              .Cells(iNewRowNo, iCOLUMN__NAME) = Application.UserName
                              .Cells(iNewRowNo, iCOLUMN__DATE) = CDate([lastSave])
                              .Cells(iNewRowNo, iCOLUMN__ACTION) = [Action]
                               Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                            Else
                              ReDim vAct(1 To 3)
                              vAct(1) = Application.UserName
                              vAct(2) = Now
                              vAct(3) = [Action]
                              Me.Names("rAccess").RefersTo = vAct
                            End If
                          Else
                            If bSave Then
                              vAct = [rAccess]
                              .Cells(iNewRowNo, iCOLUMN__NAME) = vAct(1)
                              .Cells(iNewRowNo, iCOLUMN__DATE) = vAct(2)
                              .Cells(iNewRowNo, iCOLUMN__ACTION) = vAct(3)
                               Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                              vAct(3) = "CHIUSURA CON MODIFICA"
                            Else
                              ReDim vAct(1 To 3)
                              vAct(1) = Application.UserName
                              vAct(2) = Now
                              vAct(3) = [Action]
                              Me.Names("rAccess").RefersTo = vAct
                            End If
                          End If
                          .Protect Password:=sPASSWORD, userinterfaceonly:=True
                          Application.EnableEvents = True
                        End With
                    End Sub
                    
                    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
                      If Sh.Name <> "accessi" Then Me.Names("Action").RefersTo = "CHIUSURA CON MODIFICA"
                    End Sub

                    Allegato file modificato.

                    N.B.: mi scuso per il disguido, dovrebbe funzionare correttamente ma una verificare seria da parte tua è d'obbligo.

                    Allegati:
                    You must be logged in to view attached files.
                    #46081 Score: 0 | Risposta

                    Oscar
                    Partecipante
                      45 pts

                      Grande Scossa  

                      Unica cosa che vedo ; se fosse possibile

                      Quando fai una modica e salvi dal Menu , ti registra CHIUSURA CON MODIFICA , poi quando chiudi lo registra di nuovo , a mio parere all'uscita se ha già registrato non dovrebbe più registrarlo

                      #46082 Score: 0 | Risposta

                      Grazie scossa, ottimo lavoro.

                      Vedo che facendo una modifica nei fogli e poi cliccando nel pulsante icona salva si inserisce nel foglio accessi

                      CHIUSURA CON MODIFICA in questo punto è possibile inserire invece FOGLIO MODIFICATO o è troppo per modificare la macro?

                      Comunque grazie

                       

                      #46108 Score: 0 | Risposta

                      scossa
                      Partecipante
                        37 pts

                        Oscar ha scritto:

                        Quando fai una modica e salvi dal Menu , ti registra CHIUSURA CON MODIFICA , poi quando chiudi lo registra di nuovo , a mio parere all'uscita se ha già registrato non dovrebbe più registrarlo

                        frank_ciccio ha scritto:

                        CHIUSURA CON MODIFICA in questo punto è possibile inserire invece FOGLIO MODIFICATO o è troppo per modificare la macro?

                        Ho modificato il codice per risolvere entrambi i problemi, almeno spero   

                        Quindi se si fanno modifiche ai fogli  quando si salva viene registrato "nomedelfoglio MODIFICATO" su una sola riga che riporta l'ultimo foglio modificato. Volendo si può modificare facilmente il codice per tenere traccia su righe distinte tutte le volte che si modifica un foglio e poi si salva (sempre però l'ultimo foglio modificato prima del salvataggio), ma lo sconsiglio perché secondo me creerebbe troppe righe.

                        Allego il file aggiornato.

                        Allegati:
                        You must be logged in to view attached files.
                        #46124 Score: 0 | Risposta

                        Oscar
                        Partecipante
                          45 pts

                          Ottimo Scossa  

                          #46126 Score: 0 | Risposta

                          Ciao scossa, ho fatto delle prove e mi sembra sempre meglio.

                          Per questa parte, si può fare?

                          Quindi se si fanno modifiche ai fogli  quando si salva viene registrato "nomedelfoglio MODIFICATO" su una sola riga che riporta l'ultimo foglio modificato. Volendo si può modificare facilmente il codice per tenere traccia su righe distinte tutte le volte che si modifica un foglio e poi si salva (sempre però l'ultimo foglio modificato prima del salvataggio), ma lo sconsiglio perché secondo me creerebbe troppe righe.

                          #46133 Score: 0 | Risposta

                          scossa
                          Partecipante
                            37 pts

                            Ciao,

                            nella sub UpdateInfoSheet() semplifica questo blocco di codice:

                                    If [Action] Like "* MODIFICATO" And .Cells(iNewRowNo - 1, 3) Like "* MODIFICATO" Then
                                      iNewRowNo = iNewRowNo - 1
                                      Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                                    Else
                                      iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                                    End If
                                    
                                    If bSave Then
                                      If .Cells(iNewRowNo - 1, 3) Like "* MODIFICATO" Then
                                        Me.Names("Action").RefersTo = "CHIUSURA CON MODIFICA"
                                      End If
                                      .Cells(iNewRowNo, iCOLUMN__NAME) = Application.UserName
                                      .Cells(iNewRowNo, iCOLUMN__DATE) = CDate([lastSave])
                                      .Cells(iNewRowNo, iCOLUMN__ACTION) = [Action]
                                      Me.Names("Action").RefersTo = "CHIUSURA"
                                    Else

                            così:

                                    If [Action] Like "* MODIFICATO" And .Cells(iNewRowNo - 1, 3) Like "* MODIFICATO" Then
                                      Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                                    Else
                                      iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                                    End If
                                    
                                    If bSave Then
                                      .Cells(iNewRowNo, iCOLUMN__NAME) = Application.UserName
                                      .Cells(iNewRowNo, iCOLUMN__DATE) = CDate([lastSave])
                                      .Cells(iNewRowNo, iCOLUMN__ACTION) = [Action]
                                      Me.Names("Action").RefersTo = "CHIUSURA"
                                    Else

                            L'ho testato velocemente ma dovrebbe funzionare a dovere.

                            #46135 Score: 0 | Risposta

                            Sempre meglio scossa.
                            Per fare risultare il nome del foglio singolo devo cliccare nel pulsante icona salva per ogni foglio, e qui va bene.
                            Ma se per ogni foglio se faccio modfiche e non clicco nel pulsante salva risulta poi solo l'ultimo nome del foglio.
                            Per risultare in questo caso, se non clicco salva, sarebbe meglio che risultasse un nome unico tipo "FOGLI MODIFICATI"
                            Sempre sia possibile.
                            Comunque hai fatto un bel lavoro.
                            Complimenti e ancora grazie

                            #46142 Score: 0 | Risposta

                            scossa
                            Partecipante
                              37 pts

                              Ciao,

                              questo tutto il codice in sostituzione del precedente (nel modulo ThisWorkbook):

                              Private Sub Workbook_Open()
                                If [rAction].Cells(1, 3) = "ACCESSO" Or [rAction].Cells(1, 3) = "FOGLI MODIFICATI" Then
                                  Me.Names("LastSave").RefersTo = Me.BuiltinDocumentProperties(12)
                                  UpdateInfoSheet True
                                End If
                                Me.Names("Action").RefersTo = "ACCESSO"
                              '-----------------------------------------------------------------------------
                              'ACCESSI
                                Application.ScreenUpdating = False
                                Me.Names("LastSave").RefersTo = Now
                                UpdateInfoSheet True
                                Me.Names("Action").RefersTo = "CHIUSURA"
                                Me.Save
                                Application.ScreenUpdating = True
                              End Sub
                              
                              Private Sub Workbook_BeforeClose(Cancel As Boolean)
                                If [Action] = "CHIUSURA" Then
                                  UpdateInfoSheet True
                                  Me.Save
                                ElseIf [Action] Like "* MODIFICA*" Then
                                  UpdateInfoSheet
                                End If
                              End Sub
                              
                              Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
                                Me.Names("LastSave").RefersTo = Me.BuiltinDocumentProperties(12)
                                If [Action] = "ACCESSO" Then
                                  Me.Names("Action").RefersTo = "CHIUSURA"
                                ElseIf [Action] = "FOGLI MODIFICATI" And Not Me.Saved Then
                                  UpdateInfoSheet True
                                  Me.Names("Action").RefersTo = "CHIUSURA"
                                ElseIf [Action] = "CHIUSURA CON MODIFICA" And Not Me.Saved Then
                                  UpdateInfoSheet True
                                End If
                              End Sub
                              
                              Private Sub UpdateInfoSheet(Optional bSave As Boolean) '(sAction As String)
                              
                                  Const iCOLUMN__ACTION   As Integer = 3
                                  Const iCOLUMN__NAME     As Integer = 1
                                  Const iCOLUMN__DATE     As Integer = 2
                                  Const sACCESSI_SHEET       As String = "ACCESSI"
                                  Const sPASSWORD         As String = "987654"
                              
                                  Dim iNewRowNo           As Long
                                  Dim vAct                As Variant
                                  
                                  With Sheets(sACCESSI_SHEET)
                                    Application.EnableEvents = False
                                    iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                                    .Unprotect Password:=sPASSWORD
                                    If [Action] <> "CHIUSURA CON MODIFICA" Then
                              
                                      If [Action] = "FOGLI MODIFICATI" And .Cells(iNewRowNo - 1, 3) = "FOGLI MODIFICATI" Then
                                        Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                                      Else
                                        iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                                      End If
                                      
                                      If bSave Then
                                        .Cells(iNewRowNo, iCOLUMN__NAME) = Application.UserName
                                        .Cells(iNewRowNo, iCOLUMN__DATE) = CDate([lastSave])
                                        .Cells(iNewRowNo, iCOLUMN__ACTION) = [Action]
                                        Me.Names("Action").RefersTo = "CHIUSURA"
                                      Else
                                        ReDim vAct(1 To 3)
                                        vAct(1) = Application.UserName
                                        vAct(2) = Now
                                        vAct(3) = [Action]
                                        Me.Names("rAccess").RefersTo = vAct
                                      End If
                                    Else
                                      If bSave Then
                                        vAct = [rAccess]
                                        .Cells(iNewRowNo, iCOLUMN__NAME) = vAct(1)
                                        .Cells(iNewRowNo, iCOLUMN__DATE) = vAct(2)
                                        .Cells(iNewRowNo, iCOLUMN__ACTION) = vAct(3)
                                         Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                                        vAct(3) = "CHIUSURA CON MODIFICA"
                                      Else
                                        ReDim vAct(1 To 3)
                                        vAct(1) = Application.UserName
                                        vAct(2) = Now
                                        vAct(3) = [Action]
                                        Me.Names("rAccess").RefersTo = vAct
                                      End If
                                    End If
                                    Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                                    .Protect Password:=sPASSWORD, UserInterfaceOnly:=True
                                    Application.EnableEvents = True
                                  End With
                              End Sub
                              
                              Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
                                If Sh.Name <> "accessi" Then Me.Names("Action").RefersTo = "FOGLI MODIFICATI"
                              End Sub
                              #46156 Score: 0 | Risposta

                              Grazie scossa, è meglio.
                              Una piccola modifica.
                              Prima dell'ultima modifica, immagine 19_04, che hai fatto risultava per ogni foglio modificato il nome del foglio,
                              ora come nelle righe rosa, dell'immagine allegata 20_04, risulta "FOGLI MODIFICATI". E' possibile correggere?
                              Grazie ancora

                              Allegati:
                              You must be logged in to view attached files.
                              #46162 Score: 0 | Risposta

                              Ciao,

                              ho provato ad inseire tutte le macro in un nuovo, non il tuo, file ma non mi funziona dà errore qui

                              Private Sub Workbook_Open()

                              If [rAction].Cells(1, 3) = "ACCESSO" Or [rAction].Cells(1, 3) = "FOGLI MODIFICATI" Then

                              e poi alla chiusura qui

                              Private Sub Workbook_BeforeClose(Cancel As Boolean)

                              If [Action] = "CHIUSURA" Then

                              c'è qualcosa di nascosto da modificare?

                              #46169 Score: 0 | Risposta

                              Ah ho capito l'errore non ho letto nel post#46067 bisogna creare i nomi in gestiscinomi  

                              #46172 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                272 pts

                                frank_ciccio ha scritto:

                                bisogna creare i nomi in gestiscinomi

                                Quando vedi le parentesi quadre significa che sei di fronte a un Range e se invece di un riferimento di cella (ad esempio [A1]) vedi un nome, sei di fronte a un range con nome: [Action] equivale a Range("Action") con la differenza aggiuntiva che l'eventuale contenuto viene ricalcolato. Motivo per il quale scossa stesso mi rimprovero' qualche anno fa e da allora non ho piu' utilizzato questa notazione   

                                #46175 Score: 0 | Risposta

                                Ho corretto il nuovo mio file con le istruzioni di scossa del post#46067 ed ora funziona  

                                Grazie scossa

                                #46197 Score: 0 | Risposta

                                scossa
                                Partecipante
                                  37 pts

                                  Ciao,

                                  ho modificato il codice in modo che se dopo aver modificato (anche più volte) un solo foglio registra "nomefoglio MODIFICATO", se invece si sono modificati più fogli registra "FOGLI MODIFICATI".

                                  N.B: ho lasciato la gestione della scritta "CHIUSURA CON MODIFICA" ma non si verificherà più,  del resto è inutile in quanto è palese dedurre se tra ACCESSO e CHIUSURA vi siano state delle modifiche. 

                                  P.S.: non garantisco la disponibilità ad ulteriori modifiche.

                                  Private Sub Workbook_Open()
                                    If [raction].Cells(1, 3) = "ACCESSO" Or [raction].Cells(1, 3) Like "* MODIFICAT?" Then
                                      Me.Names("LastSave").RefersTo = Me.BuiltinDocumentProperties(12)
                                      UpdateInfoSheet True
                                    End If
                                    Me.Names("Action").RefersTo = "ACCESSO"
                                  '-----------------------------------------------------------------------------
                                  'ACCESSI
                                    Application.ScreenUpdating = False
                                    Me.Names("LastSave").RefersTo = Now
                                    UpdateInfoSheet True
                                    Me.Names("Action").RefersTo = "CHIUSURA"
                                    Me.Save
                                    Application.ScreenUpdating = True
                                  End Sub
                                  
                                  Private Sub Workbook_BeforeClose(Cancel As Boolean)
                                    If [Action] = "CHIUSURA" Then
                                      UpdateInfoSheet True
                                      Me.Save
                                    ElseIf [Action] Like "* MODIFICA*" Then
                                      UpdateInfoSheet
                                    ElseIf [Action] = "CHIUSURA CON MODIFICA" And Not Me.Saved Then
                                      UpdateInfoSheet True
                                    End If
                                  
                                  End Sub
                                  
                                  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
                                    Me.Names("LastSave").RefersTo = Me.BuiltinDocumentProperties(12)
                                    If [Action] = "ACCESSO" Then
                                      Me.Names("Action").RefersTo = "CHIUSURA"
                                    ElseIf [Action] Like "* MODIFICAT?" And Not Me.Saved Then
                                      UpdateInfoSheet True
                                      Me.Names("Action").RefersTo = "CHIUSURA"
                                    End If
                                  End Sub
                                  
                                  Private Sub UpdateInfoSheet(Optional bSave As Boolean) '(sAction As String)
                                  
                                      Const iCOLUMN__ACTION   As Integer = 3
                                      Const iCOLUMN__NAME     As Integer = 1
                                      Const iCOLUMN__DATE     As Integer = 2
                                      Const sACCESSI_SHEET       As String = "ACCESSI"
                                      Const sPASSWORD         As String = "987654"
                                  
                                      Dim iNewRowNo           As Long
                                      Dim vAct                As Variant
                                      
                                      With Sheets(sACCESSI_SHEET)
                                        Application.EnableEvents = False
                                        iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                                        .Unprotect Password:=sPASSWORD
                                        If [Action] <> "CHIUSURA CON MODIFICA" Then
                                  
                                          If [Action] Like "* MODIFICAT?" And .Cells(iNewRowNo - 1, 3) Like "* MODIFICAT?" Then
                                            Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                                          Else
                                            iNewRowNo = .Cells(Rows.Count, iCOLUMN__NAME).End(xlUp).Row + 1
                                          End If
                                          
                                          If bSave Then
                                            .Cells(iNewRowNo, iCOLUMN__NAME) = Application.UserName
                                            .Cells(iNewRowNo, iCOLUMN__DATE) = CDate([lastSave])
                                            .Cells(iNewRowNo, iCOLUMN__ACTION) = [Action]
                                            Me.Names("Action").RefersTo = "CHIUSURA"
                                          Else
                                            ReDim vAct(1 To 3)
                                            vAct(1) = Application.UserName
                                            vAct(2) = Now
                                            vAct(3) = [Action]
                                            Me.Names("rAccess").RefersTo = vAct
                                          End If
                                        Else
                                          If bSave Then
                                            vAct = [rAccess]
                                            .Cells(iNewRowNo, iCOLUMN__NAME) = vAct(1)
                                            .Cells(iNewRowNo, iCOLUMN__DATE) = vAct(2)
                                            .Cells(iNewRowNo, iCOLUMN__ACTION) = vAct(3)
                                             Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                                            vAct(3) = "CHIUSURA CON MODIFICA"
                                          Else
                                            ReDim vAct(1 To 3)
                                            vAct(1) = Application.UserName
                                            vAct(2) = Now
                                            vAct(3) = [Action]
                                            Me.Names("rAccess").RefersTo = vAct
                                          End If
                                        End If
                                        Me.Names("rAction").RefersTo = .Range("A" & iNewRowNo & ":C" & iNewRowNo)
                                        .Protect Password:=sPASSWORD, userinterfaceonly:=True
                                        Application.EnableEvents = True
                                      End With
                                  End Sub
                                  
                                  Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
                                    If Sh.Name <> "accessi" Then
                                      Me.Names("Action").RefersTo = IIf([Action] = "CHIUSURA" Or [Action] = Sh.Name & " MODIFICATO", Sh.Name & " MODIFICATO", "FOGLI MODIFICATI")
                                    End If
                                  End Sub
                                  

                                   

                                  #46204 Score: 1 | Risposta

                                  vecchio frac
                                  Senior Moderator
                                    272 pts

                                    scossa ha scritto:

                                    non garantisco la disponibilità ad ulteriori modifiche

                                    Gli hai dato talmente tanti spunti per apprendere e comprendere, che adesso sicuramente frank_ciccio sara' invogliato a fare da solo le modifiche che gli servono   

                                  Login Registrati
                                  Stai vedendo 25 articoli - dal 26 a 50 (di 51 totali)
                                  Rispondi a: accessi
                                  Gli allegati sono permessi solo ad utenti REGISTRATI
                                  Le tue informazioni: