restringir edicion en celdas de acuerdo a condicion en un rango predeterminado

4 envíos / 0 nuevos
Último envío
FrankRod
Imagen de FrankRod
Offline
última acción: Hace 2 días 3 horas
alta: 23/08/2019 - 17:48
Puntos: 60
restringir edicion en celdas de acuerdo a condicion en un rango predeterminado

Buenas tardes.

pro favor necesito ayuda en lo siguiente: Pro ejm tengo un rango de celdas (C2:C6), en este rango debe perimitir llenar una sola celda , es decir, si lleno o edito lña celda c4, las demas celdas deben borrar su contenido, y si luego escribo o edito en la celda C6, todas las demas celdas deben borrar su contenido.

En ese rango de celdas solo debe exitir un valor en una sola celda.... 

Muchas gracias...

Etiquetas: 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Eso solamente lo puedes hacer

Eso solamente lo puedes hacer con VBA.

Deberías programar el evento Change de la hoja, para que salte únicamente si la celda es del rango que necesitas, y luego editar los valores de las celdas convenientemente en función de cuál sea la celda modificada. Esta se conoce porque se asigna a la variable Target.

 

Un saludo

FrankRod
Imagen de FrankRod
Offline
última acción: Hace 2 días 3 horas
alta: 23/08/2019 - 17:48
Puntos: 60
restringir edicion en celdas de acuerdo a condicion en un rango

Muchas gracias tu respuesta, si estoynutilizando ese evento, mira este es el codigo que e utilizado pero solo me funcioan con la primera columana A:

Private Sub Worksheet_Change(ByVal Target As Range)

Columna = "a:a"

If Not Application.Intersect(Target, Range(Columna)) Is Nothing Then

Range("b" & Target.Row).ClearContents

Range("c" & Target.Row).ClearContents

End If

End Sub

Necesito que en el rango (A1:D1) solo pueda existir un solo valor, osea si escribo un valor en la celda B1, cualqueir otro valor de las celdas A1,C1,D1 se borren y quede solo el de B1; esta condicion para cada fila que vaya a escribir un dato.

Te agradezco nuevamente tu gentil ayuda..

AdjuntoTamaño
File libro5.xlsm14.04 KB
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 3 semanas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
Ya veo. Casi lo tienes

Ya veo. Casi lo tienes.

Primero. SI quieres que pasen varias cosas en un evento onchange, tienes que programarlas todas en ese mismo evento. No se lanzará otro evento Onchange1. Para eso tienes los If, para determinar cuál es el caso. Yo he utilizado también un Select Case, que creo que se adapta muy bien en este caso.

Segundo. El evento Onchange es muy puñetero, se lanza siempre que se modifica cualquier valor. Si dentro del evento tú modificas por código valores de celda, el evento se lanzará de nuevo cada vez que modificas algo. Yo he utilizado dos condiciones para evitar que esto pase:

- Un If que condiciona que el código solo se ejecute cuando la celda está dentro del rango que me interesa

- La instrucción Application.EnableEvents = False. Esta instrucción evita que se lancen eventos mientras se ejecuta el código hasta que vuelva a valer True.

Tercero. Siempre que utilizo expresiones como EnableEvents, Screenupdating, o modifico el cálculo a manual, lo hago utilizando un on error goto que me devuelva la hoja a su situación normal en caso de ocurrir algún error incontrolado en el código.

 

Bueno, te pongo mi código para que le eches un vistazo. El Select Case se puede sustituir por varios if/then/else anidados, pero a mí me gusta más así

 

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

On Error GoTo fin

If Target.Row > 1 And Target.Row < 7 And Target.Column > o And Target.Column < 4 Then

    Select Case Target.Column

    Case 1

        Cells(Target.Row, 2).ClearContents

        Cells(Target.Row, 3).ClearContents

    Case 2

        Cells(Target.Row, 1).ClearContents

        Cells(Target.Row, 3).ClearContents

    Case 3

        Cells(Target.Row, 1).ClearContents

        Cells(Target.Row, 2).ClearContents

    End Select

End If

 

fin:

Application.EnableEvents = True

End Sub