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

    frank_ciccio
    Partecipante
      3 pts

      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
            58 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

                  frank_ciccio
                  Partecipante
                    3 pts

                    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

                          frank_ciccio
                          Partecipante
                            3 pts

                            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

                                frank_ciccio
                                Partecipante
                                  3 pts

                                  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

                                    frank_ciccio
                                    Partecipante
                                      3 pts

                                      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

                                        frank_ciccio
                                        Partecipante
                                          3 pts

                                          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

                                          frank_ciccio
                                          Partecipante
                                            3 pts

                                            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

                                            frank_ciccio
                                            Partecipante
                                              3 pts

                                              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

                                                frank_ciccio
                                                Partecipante
                                                  3 pts

                                                  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: