Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Grazie per le informazioni. Nel frattempo mi è venuta un idea che può servire anche ad altri utenti. In pratica ho messo nel Foglio1 il collegamento protetto ed i controlli non protetti mentre nel Foglio2 la routine sopra esposta, senza protezione. Infine ho aggiunto nel foglio1 un pulsante con la seguente routine:
Private Sub CommandButton3_Click() '
If Range("AB1") = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Then
Worksheets("DDECollegamento").Visible = False
ElseIf Range("AB2") = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Then
Worksheets("DDECollegamento").Visible = True
End If
End Sub
Inserendo nella cella indicata il codice posso far vedere o nascondere il foglio2. Nascosto il foglio si cancella la password dalla cella indicata e questo impedisce di vedere e modificare il foglio2. La routine funziona correttamente e, mi sembra che, l'unico modo per conoscere il codice è crackare la pasword del progetto VBA.
Un accorgimento, ho inserito le lettere perchè se inserisco una serie di 0, zeri, VBA li riconosce come numero e ne accetta solamente uno. Come è possibile dire al programma che è una stringa testo?
Grazie per la risposta.
Capito poco e penso che sia inutile quello che proponi. Esiste la possibilità di utilizzare i nomi nascosti per la password, senza la necessità di utilizzare la cella di un foglio nascosto. Scusa, ma mi fanno sempre sorridere i tentativi di proteggere il file di Excel e le strade che seguite. Excel *non si difende* con quello che mette a disposizione. Anche la protezione del codice si toglie in 3 minuti, basta sapere cosa fare ed in rete si trova di tutto. Come ho detto più volte, una strada abbastanza sicura è quella di mettere la logica(il codice) in una ActiveX DLL. Questo non lo fai con Excel, ma ad esempio con Visual Studio 6.0 o Visual Basic 6.0. La ActiveX DLL è compilata, quindi più sicura(nulla è però impossibile). La DLL va poi registrata e referenziata sulle macchine che utilizzano il file.
Ti posto il codice per il Name nascosto, se vuoi sapere di più sulle ActiveX DLL, per favore apri un nuovo post, grazie:
Public Sub m()
ActiveWorkbook.Names.Add Name:="myName", _
RefersTo:="tuaPassword", Visible:=False
End Sub
Questa routine va poi eliminata. Ed ecco comerecuperare il contenuto del contenuto di myName:
Private Sub m_1()
MsgBox [myName]
End Sub
Quindi, facile adesso fare una UserForm di immissione password che confronti quanto inserito ad esempio in una TextBox con myName.
--
La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.
--
Mauro Gamberini - Microsoft© MVP(Excel)