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

#11 Héctor Miguel
09/11/2006 - 01:48 | Informe spam
hola, Victor !

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



1) [por lo que se]... 'eso'... es de los 'detalles' que 'le toca corregir'... a quien hace la consulta
[obviamente] cuando detalles 'de ese tipo' han sido 'omitidos' al consultar...
[razon por la cual] quien 'propone' [generalmente] 'avisa' de cuales son sus 'supuestos'...
[por que ?]... por 'razones obvias' :D

__ 2 __
... codigo... en... Sheet3... (nota que la primera parte no tiene nada que ver contigo
... lo muestro por si acaso crear algun tipo de conflicto, quien sabe.
Basicamente su funcion... 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)



2) [por si las dudas]... en un modulo de codigo NO pueden 'co-existir' DOS procedimientos del mismo nombre :-(
[ademas]... el codigo que expones para 'evitar' que se dejen celdas vacias... NO lo tenias 'mencionado' [en esta consulta] -?-
solo tenias comentarios en ralacion a si 'ciertas' celdas iniciaban con 'X' numero... o estaban 'VACIAS' ;)
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 [etc. etc. etc.]...

__ 3 __
... Ya lo tengo todo. (De hecho ya no hay ningun codigo mas que haga mas cosas
solo alguna funcion, 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 mencion 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 codigo grande.Uy!



3) aunque NO 'veas'... una 'mencion directa'... a las celdas de las columnas 'E' y 'N'... SI se hace referencia a ellas [en el codigo]...
a) nota que los codigos de la propuesta estan 'dirigidos' a selecciones y cambios en los rangos 'clave'...
o sea, donde se producen los cambios con la instruccion:-> Intersect(Target, Range("b7:b56,k7:k56"))
b) la 'afectacion' de si las celdas 'parientas' [E para B y N para K] quedan des/re/bloqueadas... la realiza el codigo...
con las instrucciones del tipo: -> With Target.Offset(, 3)
-> para tu conocimiento, la propiedad '.Offset' de un rango equivale a 'desplazar' su referencia n_filas y n_columnas [me explico]
si se cambia la celda 'B7' su Offset(, 3) hace referencia a su misma fila, pero 3 columnas a la derecha... = 'E7'
si se cambia la celda 'K56' su Offset(, 3) es referencia a su misma fila, pero 3 columnas a la derecha... = 'N56'

__ 4 __
Parece que hay una incongruencia con mi viejo codigo. No pasa nada, lo vamos a desactivar para hacer pruebas a ver si funciona.



4) revisa el comentario del punto 2 :D

__ 5 __
... ahora no da errores... pero parece no tener efectos > y ademas 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).



5) si quieres 'conjuntar' ambos procedimientos... [evitar celdas vacias Y monitorear los des/re/bloqueos]... se necesita hacer adaptaciones :))

__ 6 __
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.



6) antes de hacerte la propuesta [y con las condiciones conocidad en este hilo]...
[te lo aseguro] despues de diferentes pruebas... 'hace'... lo que la consulta solicita :D

es por eso que 'trato' de invitar a quien consulta a que 'suelte' -todo- lo que se le ha quedado... 'en el tintero' :))

si cualquier duda [o informacion adicional]... comentas ?
saudos,
hector.
Respuesta Responder a este mensaje
#12 MyVi
09/11/2006 - 08:52 | Informe spam
Hector, aclarados estos puntos (muy agradecido de tu parte) me pongo a
hacer más pruebas. Aunque lo último que hice anoche fue partir de
cero cero y en blanco... y tampoco me funcionó. Voy de nuevo..

Vale. Esta vez uso Office 2003 en Español (bueno, de hecho, que yo
trabaje en casa en inglés realmente no significa nada pues todos los
usuarios en su mayoria lo haran en castellano).
Creo una hoja de cero, y desbloqueo convenientemente el rango B y K
(que serán los que han de ser editados por el usuario).

A ver, te lo pongo en el link de abajo para que tu mismo lo puedas ver.
No sé, pero creo que ahora no estoy haciendo nada raro! No tiene nada
de nada!.

http://www.savefile.com/files/240072

En cualquier caso, cuando omito una información, es p.q. creo que no
era necesaria, y trato de no andarme por las ramas.
Cierto es que los rangos B y K nunca pueden estar vacios y en su lugar
ha de haber un "0", pero creia que lo tenia resuelto.
O un nº (de 5 digitos)
O un nº 0
Pero nunca VACIO, pues de ser asi me dan errores unos calculos.

Esta ultima necesidad ha sido algo nuevo y no planeado. Mi primera
necesidad fue lo del "0" y yo lo di por terminado, pero fué al usar la
hoja los usuarios cuando vimos que habia que aplicar nuevos cambios, y
de ahi es cuando sale esta necesidad de bloquear y desbloquear segun
condicion.

Gracias de nuevo Hector.

Victor
Respuesta Responder a este mensaje
#13 Tux
09/11/2006 - 10:16 | Informe spam
MyVi escribió:
Hector, aclarados estos puntos (muy agradecido de tu parte) me pongo a
hacer más pruebas. Aunque lo último que hice anoche fue partir de
cero cero y en blanco... y tampoco me funcionó. Voy de nuevo..

Vale. Esta vez uso Office 2003 en Español (bueno, de hecho, que yo
trabaje en casa en inglés realmente no significa nada pues todos los
usuarios en su mayoria lo haran en castellano).
Creo una hoja de cero, y desbloqueo convenientemente el rango B y K
(que serán los que han de ser editados por el usuario).

A ver, te lo pongo en el link de abajo para que tu mismo lo puedas ver.
No sé, pero creo que ahora no estoy haciendo nada raro! No tiene nada
de nada!.

http://www.savefile.com/files/240072

En cualquier caso, cuando omito una información, es p.q. creo que no
era necesaria, y trato de no andarme por las ramas.
Cierto es que los rangos B y K nunca pueden estar vacios y en su lugar
ha de haber un "0", pero creia que lo tenia resuelto.
O un nº (de 5 digitos)
O un nº 0
Pero nunca VACIO, pues de ser asi me dan errores unos calculos.

Esta ultima necesidad ha sido algo nuevo y no planeado. Mi primera
necesidad fue lo del "0" y yo lo di por terminado, pero fué al usar la
hoja los usuarios cuando vimos que habia que aplicar nuevos cambios, y
de ahi es cuando sale esta necesidad de bloquear y desbloquear segun
condicion.

Gracias de nuevo Hector.

Victor




Hola MyVi :-)

Bien continuamos para bingo :-))))

Ahora voy yo jeje! He mirado y he probado el archivo que nos has mandado
y si funciona veras :-) (creo)

Tu lo que quieres que la columna B no este vacia pues añadiendo el
codigo que te di y cambiando una linea de true a False, me parece que ya
te sale mas o menos lo que tu deseabas, a ver, borra lo que tienes en el
codigo de la hoja uno y pon el codigo de Hector mas el que apañamos la
otra vez, dicho sea de paso quedara un poco torero el codigo :-), osea
se asi:

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 Target.Column = 2 Then
If Target = "" Then Target = 0

Else
If Target.Column = 11 Then
If Target = "" Then Target = 0
Else

End If
End If

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 = False: .Value = "SI"


End Select
End With
End Sub

este codigo (tengo que decir que no se hacer un enlace del codigo
anterior con el ofrecido por Hector, :-# algun dia acabare llevandome
bien con el codigo :-), bien ese codigo lo pegas en tu hoja ya sea Sheet
o ya sea hoja o sea el nombre que tengas, ya que no hace mencion al
nombre de la hoja :-)

El resto lo tienes bien, ahora no se si lo he acabado de liar mas, bueno
ya me comentais ok?:-)

saludos
Monica





¡Un SAludo!:-)

www.fermu.com
www.zorval.es
Respuesta Responder a este mensaje
#14 MyVi
09/11/2006 - 15:23 | Informe spam
Vaya! Pues no.lo.entiendo!! ahora SI me funciona!!

Perfecto. ¿debía estar demasiado dormido anoche y esta mañana?

Lo voy a probar en mi código original (con el resto) y os cuento toda
la pelicula.

Gracias Monica, gracias Hector..

Victor
Respuesta Responder a este mensaje
#15 MyVi
09/11/2006 - 15:47 | Informe spam
Vale, mi gozo en un pozo. P.q. hablaré antes de hora.

El caso es que desde hoja 0 funciona muy bien, pero en la mia no va!!!

He limpiado todo el código que habia y he pegado el de la hoja nueva
(que funciona),
solo he cambiado lo de "hoja1" por "sheet3" y nada más, pero me da un
error.

Bueno, más que ponerme a exponer aqui el error que me da y donde, os
paso el susodicho archivo:

http://www.savefile.com/files/240831

Tambien subo el archivo en blanco que ahora me funciona perfectamente
(para que podais comparar).

http://www.savefile.com/files/240846

Bueno, un ultimo detalle:
En la hoja limpia, ciertamente funciona bien (y no sé ver el pq), pero
al borrar el valor de la celda (y de forma automática se quedaba en
"0" no volvian a su estado original, y lo he arreglado.

Lo que no entiendo es p.q. no funciona lo mismo en mi hoja buena.
A ver si vosotros sabeis ver la razón.
La única diferencia que yo le veo es que mi hoja esta en ingles (o
sea, SHEET) en vez.
Estoy por añadir todos los cambios a la hoja nueva y listos (aunque
ahi hay bastante trabajo).

Gracias nuevamente.

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