Bloquear solo llenas (Fernando Arroyo)

30/12/2003 - 11:04 por Compumakro | Informe spam
Hola Fernándo.
La idea es que no emerja ningún cuadro y permita introducir datos si la
celda está vacía.
Luego se introducen datos y ahí si pide contraseña.

Yo hice lo siguiente pero emerje dos veces el pedir contraseña. Además igual
pide contraseña con las celdas vacías.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Permiso As String
Permiso = InputBox("¿Cuál es tu clave?")
If Target.Cells(1).Value >= 1 Then
InputBox ("¿Cuál es tu clave?")
If Permiso <> "password" Then
MsgBox "La clave ¡ NO es correcta !!!"
Else
Target = InputBox("Indica el dato para la celda " & Target.Address)
End If
Application.EnableEvents = False
Cells(Cells(65536, Target.Column).End(xlUp).Row + 1,
Target.Column).Select
Application.EnableEvents = True
End If
End Sub


Saludos
Oscar
Barranquilla
 

Leer las respuestas

#1 Héctor Miguel
31/12/2003 - 10:32 | Informe spam
hola, oscar !

[me parece que] esta consulta esta relacionada con una anterior acerca de ''ingreso por inputbox' del dia 20 :))
['aunque'... tampoco 'supe' si te fue 'de utilidad' la propuesta] :((

si entiendo bien [la secuencia de tus consultas], lo que 'intentas' hacer es...
1.- 'impedir' al usuario que introduzca datos 'directamente' en las celdas [¿'inhabilitar' el teclado???]
2.- 'filtrar' [todas] las entradas a las celdas por 'inputboxes' [aunque el 'efecto final' es igual a una 'entrada directa'] -???-
3.- 'de paso' [si la celda tiene datos]... pedirle una contraseña para 'poder modificar' su contenido [mismo comentario]

[oscar dice...]
... que no emerja ningun cuadro y permita introducir datos si la celda esta vacia [...]
... lo siguiente ... emerje dos veces el pedir contraseña ... igual pide contraseña con las celdas vacias [...]



==> la 'aparicion' de los inputboxes 'obedece' a la 'secuencia' [y la logica] de las instrucciones en el codigo <= ademas de que 'modificar' una celda 'dispara' -nuevamente- el evento '_SelectionChange'
[NO 'importa' si NO 'sucede' un cambio 'real' o 'efectivo' de la celda 'activa' o... '_SelectionChange']

'atendiendo' al 'asunto' que 'nos ocupa'...
1.- para 'inhabilitar' el teclado [y el raton] para el usuario, 'se puede usar' => Application.Interactive = False < Pros: el usuario NO PODRA 'usar' el teclado [ni el raton]... ¡ PARA NADA !!!
Cons: TAMPOCO 'cambiar de celda activa', NI 'cerrar' la aplicacion [...] ¡ NI NADA !!!
TAMPOCO la aplicacion ['por si misma'] 'regresa' [a True] la 'interactividad' con el usuario <== OJO

2.- para los 'efectos' que necesitas [si he 'interpretado bien' la secuencia de tus consultas]
al final expongo una 'combinacion' de eventos que tiene un 'efecto similar' al 'Application.Interactive = False'
[creo que 'cubriendo' ademas -casi todas- las 'eventualidades' de acciones del usuario y tus 'requerimientos'] :))

saludos,
hector.

en el modulo de codigo de 'la hoja' ==' para cuando el usuario 'cambie' la seleccion de la celda 'activa' '
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim DatoActual As String, Permiso As String, DatoNuevo As String
DatoActual = Target.Cells(1, 1).Formula
If Not IsEmpty(Target.Cells(1, 1)) Then
Permiso = InputBox("¿Cual es tu clave?", "")
If Permiso <> "PassWord" Then GoTo ClaveInválida
End If
DatoNuevo = InputBox("Ingresa el nuevo dato.", "")
If DatoNuevo = "" Then
If DatoActual <> "" Then
If MsgBox("¿Confirmas el ""borrado"" del dato actual en " & _
Target.Cells(1, 1).Address(False, False) & "?", _
vbOKCancel + vbQuestion + vbDefaultButton2, "") = vbCancel _
Then GoTo SiguienteCelda Else GoTo Modificar
Else: GoTo SiguienteCelda
End If
Else
Modificar:
Application.EnableEvents = False
Target.Cells(1, 1) = DatoNuevo: DatoActual = DatoNuevo
Application.EnableEvents = True
End If
Exit Sub
ClaveInválida:
MsgBox "Clave... ¡ Incorrecta !!!", , ""
SiguienteCelda:
DatoActual = ""
Application.EnableEvents = False
Cells(65536, Target.Column).End(xlUp).Select
If Not IsEmpty(ActiveCell) Then ActiveCell.Offset(1).Select
Application.EnableEvents = True
End Sub

' por si cuando el usuario modifica 'directamente' el contenido de la celda '
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End Sub

P.D. [espero que no lo tomes 'a mal'] :))
[creo que] no es 'buena idea' pedir 'que responda' [solamente] algun grupo o persona 'en particular' :((
[con seguridad] 'alguien mas' podria tener la respuesta ANTES que 'el interpelado'... 'pero'... ¿responderia???
[inclusive, 'el interpelado' pudiera no 'estar disponible' en ese momento y A TI pudiera 'urgirte' una solucion] :\\

Preguntas similares