Saltar al contenido

Userform en Beforesave


Recommended Posts

publicado

Hola, Quisiera saber si es posible guardar el archivo con un Userform en el BeforeSave?, Tengo el siguiente codigo:<br><br>BeforeSave:<br><br>

Private Sub workbook_beforesave(ByVal SaveAsUI As Boolean, Cancel As Boolean)<div>Contraseña1.Show</div><div>End Sub</div><div>[/CODE]

</div><br>Userform(Contraseña1):<br><br>

[CODE]Private Sub Guardar_Enter()<div>CommandButton1.default = True</div><div>Pass = TextBox1</div><div>If Pass = "s" Then</div><div>TextBox1.Text ""</div><div>Contraseña1.Hide</div><div>MsgBox "Se guardo correctamente"</div><div>End If</div><div>End Sub</div><div><br></div><div>Private Sub Cancelar_Click()</div><div>TextBox1.Text ""</div><div>Contraseña1.Hide</div><div>MsgBox "No se hizo nada"</div>End Sub[/CODE]

<br><br>El problema que tengo es que al seleccionar el boton cancelar tambien me guarda el archivo, alguno sabe como puedo hacer para que al momento de hacer click en Cancelar no guarde.<br><br>Gracias de antemano.

publicado

Te sugiero usar InputBox en un lugar de un formulario

Dim Valor As String

Valor = InputBox("Para continuar imprimiendo por favor ingrese la contraseña.", "Impresión")

If Valor = "pass" Then

'Guarda

Else

MsgBox "Contraseña incorrecta.", vbExclamation, "Impresión"

Cancel = True

End If

Saludos !!

Invitado Héctor Miguel
publicado

observa bien lo siguiente:

1) el evento '_beforesave' solo muestra el formulario y el preceso (guardar) "se espera" a que el usaurio "termine" con el

2) independientemente de "como" responda el usuario, el proceso (guardar) SIGUE despues del formulario

3) para cancelar el evento ('_beforesave') se debe establecer el "Cancel" como True

otro) el .Show de un formulario hace dos acciones: lo "carga" en memoria y lo muestra

el .Hide solo lo oculta de la interfaz pero el formulario SIGUE "cargado" en memoria

eventualmente te causara algun "problema" si no lo "eliminas" (Unload)

alternativas ?

1) declara una variable publica en un modulo de codigo estandar (p.e. => Public Pass As String)

2) al cerrar el formulario establece el valor de esa variable (p.e. Pass = TextBox1)

3) para el evento '_click' del boton de cancelar usa algo como lo sigiuente:

Private Sub Cancelar_Click()
Pass = ""
Unload Me
End Sub[/CODE]

4) para el evento '_click' del boton de guardar usa algo como lo siguiente:

OJO: no me queda claro si el procedimiento se llama "Guardar_Enter" o "Guardar_Click" <= (???)

[CODE]Private Sub Guardar_Enter()
Pass = TextBox1
Unload Me
End Sub[/CODE]

5) para el evento '_beforesave' usa algo como lo siguiente:

[CODE]Private Sub workbook_beforesave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Contraseña1.Show
If Pass <> "s" Then Cancel = True: MsgBox "el archivo NO se guardó !!!"
End Sub[/CODE]

saludos,

hector.

publicado

Gracias, pero al igual no sigue funcionando ya que el :

If pass <> "s" Then 
Cancel = True[/CODE]

Asi la contraseña sea "s" me cancela el guardado por que no reconoceria el Textbox (pass)

Muchas gracias de igual manera

publicado

Hola Camilo. El código de Héctor funciona a la perfección. Él te sugiere nombres del formulario, de la variable y el password, sólo debes adecuarlos a tu proyecto. Para que el código funcione, la clave está en la declaración de la variable pública.

publicado

Sergio dice:

Hola Camilo. El código de Héctor funciona a la perfección. Él te sugiere nombres del formulario, de la variable y el password, sólo debes adecuarlos a tu proyecto. Para que el código funcione, la clave está en la declaración de la variable pública.

Y yo añado:

Si hubieras subido tu archivo, tal como te recomiendan las normas del foro, tendrías tu consulta solucionada y de paso no nos estarías haciendo perder el tiempo.

Antoni

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.