Sulla protezione dei fogli (o software in genere) come dice bene Anthony non c'è nulla che garantisca la non violazione
e quindi non c'è nessun sistema sicuro ma come negli impianti di allarme (erroneamente chiamati Antifurto) si installano a seconda del bene da proteggere e quindi in funzione dell'interesse del malintenzionato:
in una abitazione civile si installerà un impianto contro i "topi d'appartamento" in una banca l'impianto sarà molto più sofisticato e malgrado ciò il più delle volte funzionano da deterrente.
Seguendo l'idea di Richy e i post Anthony ho voluto realizzare una macro che ha diverse "trappole" che se non altro protegge il foglio da chi ha poca esperienza in excel.
- Codice: Seleziona tutto
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpbuffer As String, nSize As Long) As Long
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Foglio1.Visible = 2
'MsgBox " Chiudo"
End Sub
Private Sub Workbook_Open()
Foglio1.Protect Password:="a", UserInterFaceOnly:=True
If Format(Now, "dd/mm/yyyy") > "31/07/2009" Or Foglio1.[IV1].Value > 1 Then
Application.DisplayAlerts = False
ActiveWorkbook.Close
End If
Dim NUtente
Dim sBuffer As String
Dim lSize As Long
sBuffer = Space(255)
lSize = Len(sBuffer)
Call GetUserName(sBuffer, lSize)
Utente = UCase(Left(Trim(sBuffer), 10))
colu = 0
Dim ut As String
Do
colu = colu + 1
If Mid(Utente, colu, 1) = Chr(0) Then Exit Do
ut = ut & Mid(Utente, colu, 1)
Loop
Utente = Trim(ut)
Open "C:\NSerHd.bat" For Output As #1
Print #1, "Dir C:\ > C:\ns.txt"
Close
abc = Shell("C:\NSerHd.Bat", 0)
Start = Timer
Pausa = 1
Attendi:
If Timer < Start + Pausa Then GoTo Attendi
Open "C:\ns.txt" For Input As #1
Do Until EOF(1)
Line Input #1, Riga
If Trim(Mid(Riga, 1, 7)) = "Numero" Then
NSer = Mid(Riga, InStrRev(Riga, ":") + 2, 9)
Close
Kill "C:\NSerHd.Bat"
Kill "C:\ns.txt"
GoTo esci
End If
Loop
esci:
If Foglio1.[IV1] = "" Then
Foglio1.[IV1] = 1
Foglio1.[IV2] = Date
Foglio1.[IV3] = NSer
Foglio1.[IV4] = Utente
Else
If Date - Foglio1.[IV2] > 10 Or Date < Foglio1.[IV2] Or Foglio1.[IV3] <> NSer Or Foglio1.[IV4] <> Utente Then
Foglio1.[IV1] = 2
'MsgBox "Scaduto periodo di prova"
Application.DisplayAlerts = False
ActiveWorkbook.Close SaveChanges:=True
End If
End If
Foglio1.Visible = 2
Foglio2.Select
Range("A1").Select
End Sub
La prima cosa non è possibile utilizzarlo oltre una certa data da stabilire (io ho inserito 31/07/2009) anche se non è mai stato utilizzato
Al primo uso scriverà nella cella
IV 1 il flag
IV 2 la data del primo avvio
IV 3 il seriale dell'Hd
IV 4 l'utente
devono essere rispettate tutte le condizioni altrimenti il flag in IV 1 diventa 2 e non è più possibile accedere al foglio
Ho eliminato i messaggi proprio per non permettere in qualche modo di andare in debug
Insomma è qualcosa in più di niente.
Ciao