Bentornata...
Le macro possono benissimo essere inserite nel file prima di renderlo disponibile per la condivisione.
Per l'elenco delle limitazioni vedere l'help on line di Excel alla voce "Utilizzare una cartella condivisa per la collaborazione", paragrafo Caratteristiche non supportate in una cartella di lavoro condivisa.
Il mio suggerimento pertanto e' questo:
1) aggiungi un foglio (prima della condivisione) e chiamalo mettiamo StatusLog; sara' quello che conterra' la situazione giorno dopo giorno
In riga 1, inserisci le seguenti intestazioni a partire da colonna A:
- Codice: Seleziona tutto
Data, Stato1, Stato2, Stato3, etc
Come Stato1-2-3-etc usa esattamente le stesse stringhe con cui gli stati compaiono in colonna T del foglio Dati, dei soli stati che ti interessa conteggiare.
2) supponiamo che i dati da monitorare siano nel foglio chiamato fantasiosamente "Dati"
3) Inserisci in un Modulo standard del vba, es Modulo1, questa macro:
- Codice: Seleziona tutto
Sub CheckStats()
Dim LastA As Long, LastLog As Long, Logger As String, tabDati As String
'
tabDati = "Dati" '<<< Il foglio con i dati da esaminare
Logger = "StatusLog" '<<< Il foglio con il riepilogo degli stati giornalieri
'
LastLog = Sheets(tabDati).Cells(Rows.Count, "T").End(xlUp).Row
With ThisWorkbook.Sheets(Logger)
'set today date
LastA = .Cells(.Rows.Count, 1).End(xlUp).Row
If TypeName(.Cells(LastA, 1).Value) = "Date" Then
If .Cells(LastA, 1).Value <> Int(Now) Then
LastA = LastA + 1
.Cells(LastA, 1).Value = Int(Now)
End If
Else
.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0) = Int(Now)
End If
'riepilogo di stati:
For I = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Column
.Cells(LastA, I) = Evaluate("COUNTIF(" & tabDati & "!T1:T" & LastLog & ", """ & .Cells(1, I).Value & """)")
Next I
End With
End Sub
Modifica le righe marcate <<< se i nomi dei fogli differiscono da quanto io ho ipotizzato.
4) Nel modulo Questa_cartella_di_lavoro inserisci questo codice:
- Codice: Seleziona tutto
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call CheckStats
End Sub
Private Sub Workbook_Open()
Call CheckStats
End Sub
5) Infine nel modulo di codice vba del foglio StatusLog (se non sai identificarlo al volo: tasto dx sul tab col nome foglio, scegli Visualizza codice) inserisci questo codice:
- Codice: Seleziona tutto
Private Sub Worksheet_Activate()
Call CheckStats
End Sub
A questo punto se salvi il file, nel foglio StatusLog dovrebbe essere aggiunta (la prima volta, o comunque se manca) la data corrente e, per ogni stato indicato da B1 verso destra, il conteggio corrente.
Questo ricalcolo avverra' anche tutte le volte che il file viene salvato e tutte le volte che il foglio StatusLog viene attivato.
Ho testato la cosa su un file condiviso tra due utenti su uno stesso Pc, ma non in una reale situazione di condivisione tra piu' utenti; questo test lo devi fare tu.
Ciao