# Programar un botón para quitar la contraseña del proyecto



## Greg Truby (Jan 7, 2010)

UliCs me mandó el siguiente mensaje el otro día. Pide el permiso de él para compartir su mensaje públicamente porque creo que puede ser útil para otros lectores.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-comfficeffice" /><o></o>
_Que tal Greg. Buenas Noches.<o></o>_
_te envio este mensaje privado porque entiendo que la pregunta que te voy a hacer no es muy bien vista por algunos.<o></o>_
_No soy muy bueno en la programación de macros como tu pero aun así hago mi lucha tengo varios archivos con macros y a algunos de ellos le he puesto contraseña en el VBAProject. Tengo la inquietud de sabes si puedo asignar una macro a un botón para que proteja o desproteja mi VBAProject. ¿Puedes tu ayudarme? Por favor.<o></o>_

Mi respuesta es así:<o></o>
No hay nada malo en esta pregunta en el sentido que UliCs no está preguntando cómo quebrar una contraseña. Él está preguntando algo muy diferente que es cómo *aplicar* una contraseña automáticamente. Puede ser que exista alguna manera más confiable desarrollando algo externo que sea compilado y agregado a Excel – algo en Visual Studio (Visual Basic o C por ejemplo). Pero si hablamos únicamente de los recursos normales de VBA – no hay una manera muy confiable. Sería necesario usar _SendKeys_ que es una herramienta poco fiable. <o></o>

Una sugerencia que daría a todos quienes ponen contraseñas a proyecto VBA o al cuaderno en sí, es utilizar las propiedades del documento para poner una pista sobre la contraseña puesto. Algo como «segundo nombre de abuelo» o «color de mi primer perro»; poniéndola en _comments_ o _keywords_. Y así cuando uno está en Windows Explorer, y pone el cursor sobre el nombre del archivo, su pista aparecerá en la ventanilla.


----------



## UliCs (Jan 8, 2010)

Gracias Greg por el apoyo.
no cabe duda que nunca se termina de aprender algo.
Saludos.


----------



## ST2 (Aug 11, 2010)

UliCs said:


> ...no cabe duda que nunca se termina de aprender algo...


otra manera que puedes lograrlo es con el siguiente código:

```
Sub desprotege()
    UnprotectVBProj ("stprotege")
    MsgBox "VBE desprotegido"
End Sub
```

la macro que hará el trabajo:

```
Sub UnprotectVBProj(ByVal Pwd As String)
'http://www.tek-tips.com/viewthread.cfm?qid=1589742&page=8
Dim vbProj As Object
Set vbProj = ThisWorkbook.VBProject
If vbProj.Protection <> 1 Then Exit Sub ' already unprotected
Set Application.VBE.ActiveVBProject = vbProj
SendKeys Pwd & "~~"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
End Sub
```
de esta manera solo tines que asignar aun "Botón" la macro "desprotege" o mediante alguna combinacion de teclas para ejecutar y con ello te puedes olvidar de la contraseña ya que solo sera necesario ejecutar la macro para que te deproteja el VBEditor.

recalcar que este es un metodo 'eminentemente' preventivo ya que como se observa no requiere 'quebrar' absolutamente nada,por lo que no infringe/viola  ninguna disposicion legal o moral.

nota.-probado exitosamente en excel 2003


----------



## Greg Truby (Aug 11, 2010)

ST, en lo que escribí en enero, mencioné el hecho de que sí es posible hacer eso con _SendKeys_.  La cosa es que nunca recomiendo el uso de _SendKeys_ por ser un método de poca confianza.  Aquí, si falla no habrá daño. Pero hay otros casos donde la gente sí ha usado _SendKeys_ en situaciones donde cuando falla habrá consecuencias muy serias. Fue por eso que no di un ejemplo a UliCs, no por no saber cómo hacerlo. Sin embargo no voy a suprimir su post en caso de que alguien decide probarlo. 

 Pero bajo ninguna circumstancia usaría yo _SendKeys_ para *poner* una contraseña.  Porque si por algún milagro falla dos veces identicamente sería un problema muy grande tratar de adivinar cómo falló para descubrir la contraseña que puso mal.


----------



## UliCs (Aug 11, 2010)

Muchas Gracias.

si funciono jeje 

saludos.


----------



## ST2 (Aug 11, 2010)

ok Greg:

tomo nota de tus comentarios y gracias por la gentileza dal dejar mi participación
 por demas decirte que en las veces que me atreví a usar sendkeys noté lo que ya comentas y si me atreví a sugerir fue por que tras diversas pruebas note que 'podia' tener cierto rango de 'confianza',lo cual no significa que no se deba tener precaucion para 'adaptar' la macro a los diferentes idiomas ya que las teclas pueden variar


----------



## Greg Truby (Aug 11, 2010)

ST2 said:


> ...gracias por la gentileza dal dejar mi participación...


 
Con mucho gusto.    Hablando en serio, favor sepa que ayuda siempre está bienvenido aquí.  Solo hay que tomar en cuenta que las sugerencias que uno da serán leidos por mucha gente de todos niveles de capacitación y por muchos años.  En las manos de alguien con suficiente experiencia, _SendKeys_ sí puede resultar útil siempre y cuando el programador se da cuenta de las limitaciones del método.  En las manos de un novato es una amenaza.


----------

