problema con userforms

22/02/2005 - 14:14 por ferbegom2003 | Informe spam
Hola lista!!

tengo una aplicación que trabaja a travez de userforms, la idea es
proteger la aplicación y he encontrado que estando un userform activo,
al presionar las teclas ctrl + interrumpir se activa la pantalla del
editor de visual basic, permitiendo de esta manera detener la
ejecución del código, he intentado lo siguiente sin obtener el
resultado esperado de evitar que se pueda detener la ejecución del
código

primera opcion
Sub UserForm_Initialize()
application.onkey "^{break},""
end sub

segunda opcion
Sub UserForm_Initialize()
sendkeys "^{break},false
end sub

Cómo puedo impedir que un usuario detenga las macros manualmente?

De otro lado quisiera saver como podría evitar que un userform pueda
ser movido en la pantalla de su ubicación definida por defecto, me
explico tengo un userform que abarca toda la pantalla, si presiono en
la parte superior del mismo, puedo dezplazar a cualquier lado el
userform y ver la hoja de cálculo, eso es justamente lo que no quiero
que se pueda hacer.

Cómo puedo impedir que un userform pueda ser desplazado?

Desde ya muchas gracias por la ayuda.

Fernando
 

Leer las respuestas

#1 Héctor Miguel
23/02/2005 - 03:11 | Informe spam
hola, fernando !

1 ... estando un userform activo... las teclas ctrl + interrumpir... activa... editor de visual basic
... como puedo impedir que un usuario detenga las macros manualmente?
2 ... evitar que un userform pueda ser movido en la pantalla
... como puedo impedir que un userform pueda ser desplazado?

si cualquier duda con las propuestas que siguen... ¿comentas?
saludos,
hector.

1.- si el usuario presiona {ctrl}+{pausa} o... {escape} estando una macro 'en ejecucion'...
se produce un error 18 en tiempo de ejecucion =>operacion cancelada por el usuario<y para que sea 'detectado' por esa propiedad, se debe incluir un 'manejo de errores' en el codigo
prueba con la propiedad EnableCancelKey [es del objeto Application]
=>revisa en la ayuda [vba] los comentarios acerca de 'cuidados especiales' en su uso<si [solamente] quieres 'desaparecer' el dialogo de la 'pregunta-confirmacion'... [p.e.]
' ... otras lineas de tu codigo ...
On Error GoTo Ver_Error
Application.EnableCancelKey = xlErrorHandler
' ... otras lineas de tu codigo ...
Ver_Error:
If Err <> 18 Then Resume
' ... otras lineas de tu codigo ...

2.- podras evitar que el usuario mueva de posicion el formulario con algunas llamadas a las APIs [p.e.]
copia las siguientes lineas en el modulo de codigo ->del formulario<. ==Private Declare Function BuscarVentana _
Lib "User32" Alias "FindWindowA" ( _
ByVal Clase As String, ByVal Nombre As String) As Long
Private Declare Function ObtenerMenu _
Lib "User32" Alias "GetSystemMenu" ( _
ByVal Ventana As Long, ByVal Revertir As Long) As Long
Private Declare Function QuitarMenu _
Lib "User32" Alias "RemoveMenu" ( _
ByVal Menu As Long, ByVal Posicion As Long, ByVal Estado As Long) As Long
Private Sub UserForm_Initialize()
EsteFormulario = BuscarVentana(vbNullString, Me.Caption)
EsteMenu = ObtenerMenu(EsteFormulario, False)
QuitarMenu EsteMenu, 1, &H400& Or &H1000&
QuitarMenu EsteMenu, 2, &H400& Or &H1000&
QuitarMenu EsteMenu, 4, &H400& Or &H1000&
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then Cancel = True
End Sub

Preguntas similares