| | Post: 3 | Registrato il: 16/10/2019
| Età: 31 | Utente Junior | 2013 | | OFFLINE | |
|
04/01/2021 15:48 | |
Buonasera,
come da titolo ho bisogno di aiuto per un foglio di lavoro contabile (prima nota) come quello in allegato dove vorrei che venissero bloccate le righe dove sia stata apportata una modifica.
Il foglio di calcolo in questione ha già una macro dove però blocca le singole celle modificare e questo è un problema perchè giorno dopo giorno lascia modificabili le celle vuote ed è per questo che vorrei bloccasse le righe in modo da non lasciare nessuna cella sbloccata della giornata modificata.
Nel foglio di calcolo dovrebbe esserci un password cartella di lavoro che ovviamente è difficilissima: Password 😂
Aggiungo che la cartella di lavoro originale è composta da poco meno di 50 fogli tutti con la stessa grafica della bozza che allego.
Sono aperto a qualsiasi tipo di consiglio per elaborare meglio la prima nota.
Ringrazio tutti per la disponibilità, purtroppo io non so fare macro anche se vorrei imparare perchè nel lavoro che faccio sarebbe molto utile conoscere queste cose.
Cordiali Saluti,
Michele G. |
|
| | Post: 1.054 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Veteran | Excel 2016-32bit Win11 | | OFFLINE |
|
04/01/2021 16:49 | |
Prova ad usare, come base di partenza, questa mia versione della tua macro Workbook_BeforeSave; le annotazioni le ho riportate nel codice. Notare che ho dovuto utilizzare una cella d'appoggio per riportare il conteggio delle celle compilate nelle varie giornate. 14 sono quelle fisse (formule comprese) e se D9 (scelta casualmente tra le tante libere) totalizza di più vuol dire che sono state compilate delle celle in quella giornata. Basta applicare il Colore nero al testo della cella per nascondere il numero. Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim x As Byte 'contatore foglio
Dim gg As Long 'contatore giornate nei mesi
Dim ur As Long 'ultima riga utilizzata
For x = 1 To Sheets.Count
Sheets(x).Unprotect "Password"
'calcolo quante righe presenti in colonna A che poi rappresenterà le diverse giornate nei vari mesi
ur = Range("A" & Rows.Count).End(xlUp).Row
For gg = 11 To ur Step 4 '4 righe rappresentano una giornata
'conto quante celle valorizzate e lo scrivo in D9
Range("D9").FormulaLocal = "=Conta.Valori(B" & gg & ":R" & gg + 3 & ")"
'se D9 > 14 allora ci sono celle compilate pertanto blocco la giornata
If Range("D9") > 14 Then Range("B" & gg & ":R" & gg + 3).Locked = True
Next gg
Sheets(x).Protect "Password"
Next x
End Sub
[Modificato da rollis13 04/01/2021 22:50]
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 3 | Registrato il: 16/10/2019
| Età: 31 | Utente Junior | 2013 | | OFFLINE | |
|
04/01/2021 19:31 | |
Ho modificato qualche cella in quanto nel file originale ho qualche dato in più e quindi la cella del conteggio era occupata.
Quando vado a modificare un giorno non completo e poi a salvare mi restituisce questo errore, per farlo funzionare devo rimuovere la protezione foglio e salvare ma questo renderebbe tutto vano.
La cosa strana è che nel file di bozza funziona con il foglio protetto invece nel file originale è come se il foglio protetto sia un problema. [Modificato da MicheleGio 04/01/2021 21:48] |
| | Post: 1.055 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Veteran | Excel 2016-32bit Win11 | | OFFLINE |
|
04/01/2021 22:01 | |
C'è una criticità nella mia versione, mi sono scordato di adeguare il Riferimento dei Range considerando che nel file originale vi sono più fogli. Sostituisci la mia precedente con quest'altra. Noterai l'aggiunta del controllo del Riferimento al foglio in elaborazione.
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim x As Byte 'contatore foglio
Dim gg As Long 'contatore giornate nei mesi
Dim ur As Long 'ultima riga utilizzata
For x = 1 To Sheets.Count
With Sheets(x)
.Unprotect "Password"
'calcolo quante righe presenti in colonna A che poi rappresenterà le diverse giornate nei vari mesi
ur = .Range("A" & .Rows.Count).End(xlUp).Row
For gg = 11 To ur Step 4 '4 righe rappresentano una giornata
'conto quante celle valorizzate e lo scrivo in D9
.Range("D9").FormulaLocal = "=Conta.Valori(B" & gg & ":R" & gg + 3 & ")"
'se D9 > 14 allora ci sono celle compilate pertanto blocco la giornata
If .Range("D9") > 14 Then .Range("B" & gg & ":R" & gg + 3).Locked = True
Next gg
.Protect "Password"
End With
Next x
End Sub [Modificato da rollis13 04/01/2021 22:11]
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 4 | Registrato il: 16/10/2019
| Età: 31 | Utente Junior | 2013 | | OFFLINE | |
|
04/01/2021 22:08 | |
Ho provato a rimuovere la protezione a tutti i fogli e salvare di nuovo tutto, non cambia nulla eppure password di blocco e di sblocco coincidono.
|
| | Post: 1.056 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Veteran | Excel 2016-32bit Win11 | | OFFLINE |
|
04/01/2021 22:11 | |
Scusa, non ho fatto in tempo a modificare il mio post. Rivedi il mio precedente post.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
| | Post: 5 | Registrato il: 16/10/2019
| Età: 31 | Utente Junior | 2013 | | OFFLINE | |
|
04/01/2021 22:20 | |
Perfetto, adesso va senza intoppi, grazie ancora per il tuo aiuto. |
| | Post: 1.057 | Registrato il: 16/08/2015
| Città: CORDENONS | Età: 67 | Utente Veteran | Excel 2016-32bit Win11 | | OFFLINE |
|
04/01/2021 22:51 | |
Grazie del riscontro positivo 👍.
______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto) |
|
|