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