Desbloqueo de celda "bloqueada" segun condicion

06/11/2006 - 18:33 por MyVi | Informe spam
Buenas grupo.
Tengo esta problemática que no encuentro solución en ningun otro
ejemplo del foro.

Una hoja de cálculo, (con celdas bloquedas [E7:E56] usando su
correspondiente contraseña para bloquear la hoja), donde me interesa
que al cambiar el valor de (B7:B56) se produzcan 3 condiciones (segun
su valor introducido).

Ampliemos:

Sheet3 protegida con contraseña. Algunas celdas estan, pues bloqueadas
otras no.
If [B7:B56] = "1" o "2" o "3" o VACIA then [E7:E56] = (BLOQUEADA +
VACIA)
if [B7:B56] = "5" then [E7:E56] = (DESBLOQUEADA + "SI")
if [B7:B56] = "6" then [E7:E56] = (DESBLOQUEADA + VACIA)


Creo que estan todos los detalles. Por mucho que leo los foros al
respecto de esto, en ningun caso me queda claro cómo proceder, y
cuando lo intento, en ningún caso me funciona bien ¿será mi gran
cerebro? ;- )


Gracias a todos de antemano.

Victor

Preguntas similare

Leer las respuestas

#6 MyVi
08/11/2006 - 14:08 | Informe spam
Tux, asi es... en esta worksheet es donde tengo el código anterior.
Es decir, que las celdas B7:B56 & K7:K56 realmente nunca estan vacias.
Siempre tienen un "0" p.q., aunque uno borre el nº de 5 digitos que
haya puesto, un poco de codigo te repone el cambio VACIO por un "0" a
cambio (sino, los calculos que otras celdas hacen, marcan error).


Hector de Miguel,

1) las celdas 'libres' seran re/editadas/entradas/... 'una a una' ? o pudiera ser que se modifiquen 'varias' a la vez ?



Las celdas 'libres' (entiendo que nos referimos a las B7:B56 & K7:K56)
serán tratadas una a una. Como mucho podria haber algun usuario que
sus "psm" (pulsaciones por minuto) fueran 2000 ;- )


2) prefieres que 'esperemos' para conocer las propuestas de los grupos en ingles ?


[creo que tampoco les resulto muy 'clara' la exposicion del
'problema'] :D
o le vamos dando [a ver que no resulta] ;)

Ciertamente estoy tratando este problema en foros en inglés, pero yo
preferiria continuar desde aqui, ya que, sea donde sea que (finalmente)
me den la solución, yo me dicaré a exponer el resultado final y
funcional en aquellos foros que haya abierto (y hayan tenido
continuidad), ya que, lo que me servido a mi de ayuda, puede servir
para más gente en el futuro (simplemente leyendo todo el proceso).

O sea, vamos le dando aqui (al igual que asi hago en los foros en
ingles), a ver donde acabamos antes. Ciertamente es muy utili
encontrarte, con una simple búsque, el caso de una persona que tuvo tu
mismo problema y que lo resolvió de la forma que lees lo hizo (y toda
su evolución).


Gracias Hector.
Respuesta Responder a este mensaje
#7 Tux
08/11/2006 - 17:45 | Informe spam
MyVi escribió:
Tux, asi es... en esta worksheet es donde tengo el código anterior.
Es decir, que las celdas B7:B56 & K7:K56 realmente nunca estan vacias.
Siempre tienen un "0" p.q., aunque uno borre el nº de 5 digitos que
haya puesto, un poco de codigo te repone el cambio VACIO por un "0" a
cambio (sino, los calculos que otras celdas hacen, marcan error).


Hector de Miguel,

1) las celdas 'libres' seran re/editadas/entradas/... 'una a una' ? o pudiera ser que se modifiquen 'varias' a la vez ?



Las celdas 'libres' (entiendo que nos referimos a las B7:B56 & K7:K56)
serán tratadas una a una. Como mucho podria haber algun usuario que
sus "psm" (pulsaciones por minuto) fueran 2000 ;- )


2) prefieres que 'esperemos' para conocer las propuestas de los grupos en ingles ?


[creo que tampoco les resulto muy 'clara' la exposicion del
'problema'] :D
o le vamos dando [a ver que no resulta] ;)

Ciertamente estoy tratando este problema en foros en inglés, pero yo
preferiria continuar desde aqui, ya que, sea donde sea que (finalmente)
me den la solución, yo me dicaré a exponer el resultado final y
funcional en aquellos foros que haya abierto (y hayan tenido
continuidad), ya que, lo que me servido a mi de ayuda, puede servir
para más gente en el futuro (simplemente leyendo todo el proceso).

O sea, vamos le dando aqui (al igual que asi hago en los foros en
ingles), a ver donde acabamos antes. Ciertamente es muy utili
encontrarte, con una simple búsque, el caso de una persona que tuvo tu
mismo problema y que lo resolvió de la forma que lees lo hizo (y toda
su evolución).


Gracias Hector.




Hola Victor :-)

a ver una cosilla, :-), no es bueno pedir ayuda a otras news con un
mismo problema por lo siguiente:

1º Restar tiempo de ayuda a otros usuarios
2º Te pueden crear confusion
3º Que dejen de ayudarte

De momento estoy intentando visualizar el tema y de mirar a ver como lo
podemos hacer :-)

Saludos
Monica

¡Un SAludo!:-)

www.fermu.com
www.zorval.es
Respuesta Responder a este mensaje
#8 Héctor Miguel
08/11/2006 - 18:42 | Informe spam
hola, Victor !

1) las celdas 'libres' seran re/editadas/entradas/... 'una a una' ? o pudiera ser que se modifiquen 'varias' a la vez ?



Las celdas 'libres' (entiendo que nos referimos a las B7:B56 & K7:K56) seran tratadas una a una.
Como mucho podria haber algun usuario que sus "psm" (pulsaciones por minuto) fueran 2000 ;- )



prueba con las siguientes instrucciones [suponiendo que 'la hoja' es la hoja1] -?-...
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

1) proteges la hoja solo para el usuario en el evento '_open' del libro [modulo del ThisWorkbook]
Private Sub Workbook_Open()
Worksheets("hoja1").Protect Password:="aBc", UserInterfaceOnly:=True
End Sub

2) las siguientes instrucciones son en el modulo de codigo de 'esa' hoja...

a) te aseguras que el usuario seleccione solo una celda cuando se trate del rango correspondiente:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("b7:b56,k7:k56")) Is Nothing Then ActiveCell.Select
End Sub

b) aplicas el des/re/bloqueo de las celdas segun el primer caracter en el rango 'comando':
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("b7:b56,k7:k56")) Is Nothing Then Exit Sub
If IsEmpty(Target) Then Target.Offset(, 3).ClearContents: Exit Sub
With Target.Offset(, 3)
Select Case Left(Target, 1)
Case 1, 2, 3: .Locked = True: .ClearContents
Case 4, 6: .Locked = False: .ClearContents
Case 5: .Locked = True: .Value = "SI"
End Select
End With
End Sub
Respuesta Responder a este mensaje
#9 MyVi
09/11/2006 - 00:18 | Informe spam
Hola Hector.

Veamos,

Para empezar (para saberlo) mi ofice esta en ingles, con lo que mi hoja
se llama "Sheet3".

Luego, cambio la contraseña y uso la de tu codigo (al menos hasta que
lo tenga controlado): "aBc".

Para proteger, lo que hago es ir a Tools/Protection/Portect Sheet/ y
ahi lo que tengo marcado son 2 simples cosas: a)protect worksheet and
contents of locked cells & b)select unlocked cells. De ahi le indico el
password y le doy a OK.

(espero que hasta el momento vaya bien encaminado).

Como veo que el código lo puedo poner esté protegido o no, pues no me
fijo en este detalle, sinembargo he probado de ambas formas (con el
mismo resultado).

En la ventana de código, doble click en donde dice Sheet3 (a la
izquierda) y en la ventana que me aparece a la derecha añado este
código, (nota que la primera parte no tiene nada que ver contigo, pero
te lo muestro por si acaso crear algun tipo de conflicto, quien sabe.
Básicamente su función, como verás, es conseguir que dichas celdas
no esten vacias sino con un 0 en su lugar, aunque las borre de 4 en 4,
pues inicialmente funcionaba pero solo si las borraba de una en una, y
el error bla bla lo arregla)


Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 Then
If Target = "" Then Target = 0 ' aqui evita celda vacia para
columna B
Else
If Target.Column = 11 Then
If Target = "" Then Target = 0 ' aqui columna K
On Error GoTo 0
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("b7:b56,k7:k56")) Is Nothing Then
ActiveCell.Select
End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("b7:b56,k7:k56")) Is Nothing Then Exit Sub
If IsEmpty(Target) Then Target.Offset(, 3).ClearContents: Exit Sub
With Target.Offset(, 3)
Select Case Left(Target, 1)
Case 1, 2, 3: .Locked = True: .ClearContents
Case 4, 6: .Locked = False: .ClearContents
Case 5: .Locked = True: .Value = "SI"
End Select
End With
End Sub

Luego le doy otro dobleclick a "ThisWorkbook" y le pego este otro
codigo:


Private Sub Workbook_Open()
Worksheets("Sheet3").Protect Password:="aBc", UserInterfaceOnly:=True
End Sub

Bien. Ya lo tengo todo. (De hecho ya no hay ningun codigo más que haga
mas cosas, solo alguna función, eso si, pero para nada involucradas
con E7:E56,N7:N56)

Me da un error:
pero... OKEY, yo mismo me doy cuenta de un detalle...
en ningun momento se hace mención de los rangos E ni de los N (que son
las celdas protegidas por defecto que han de cambiar su estado de
protegidas y desprotegidas en funcion de lo que pongo en sus parientas
las B y K, asi que yo mismo lo cambio en el código grande.
Uy! Parece que hay una incongruencia con mi viejo código. No pasa
nada, lo vamos a desactivar para hacer pruebas a ver si funciona.

Pues nada, ahora no da errores por ningun lado, pero parece no tener
efectos, y además he perdido la capacidad de cambiarme las celdas
vacias por 0 (que justamente son las mismas de nuestro ejemplo, te lo
refresco: B7 hasta B56 y K7 hasta K56). Pruebo poniendo un simple "1"
en B7 para ver si si parienta E7 se moviliza, y bueno... va bien p.q.
no hace nada (lo cual es correcto),
pruebo con un "2" e igual (hasta aqui vamos bien), nada tampoco con un
"3", OKEY! pero... cuando pongo un "4" deberia desprotegerse y quedarse
vacia. Vacia si se queda (pues ya lo estaba, pero sigue bloqueada).
Pruebo con un "45123" pero la cosa sigue igual.
Pruebo con un "5" y tambien con un "54321" y nada, no se mueve.

Estoy usando Excel 2003 en ingles. (como detalles).
Cuando introduzco un nº de 5 digitos en una de esas celdas (de los
grupos B o K), dicho nº ha de ser analizado y en funcion de su primer
digito la celda hermana (de los grupos E o N) ha de cambiar a
consecuencia (siguiendo las 3 reglas). Si la celda donde introducimos
(o quitamos o cambiamos) el número es la B10, la que ha de cambiar o
verse afectada es la E10, y si fuera la K23 seria la N23 la afectada.

Bueno, aqui lo dejo, pues parece que estamos muy cerca pero algo falla.


Gracias Hector.
Y por supuesto, gracias Monica.
Victor.
Respuesta Responder a este mensaje
#10 MyVi
09/11/2006 - 01:14 | Informe spam
Hector, si te sirve de algo, he empezado una hoja NUEVA y LIMPIA,
y me he concentrado en tu código, protegiendo las celdas y poniendo la
contraseña
simplemente para que no puedieran haber ninguna interferencia, y no me
funciona tampoco,
me da el mismo resultado, NO PASA NADA.

Una cosa que he notado (y me gusta mucho) es que queda prohibido en
seleccionar mas de una celda al mismo tiempo (para borrarlas) lo cual
esta muy bien (me gusta).


Victor
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida