es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo utilizar Change(byVal Target as Range) para verificar/cambiar el color de las celdas?

Mi entrada de datos principal es una hoja de cálculo llamada “Master”. Quiero verificar en el rango A2:A1000 cuando se ingresa una palabra. Si es “CBI”, “Fire”, “InCase” o “LEA”, no es necesario hacer nada en la columna I (Offset(0, 8)) ya que ya tiene un sin relleno (Interior.ColorIndex = -4142). Pero, si se ingresa cualquier otra palabra en el rango A2:A1000, la columna I (Offset(0, 8)) se cambia a un color diferente (Interior.Color = RGB(255, 231, 255)). He seleccionado la hoja de cálculo discreta con “Worksheet” y “Change”, pero no puedo hacer que funcione la Intersect. Sé que el código es repetitivo… Me gustaría usar múltiples argumentos, como “CBI”, “Fire”, “InCase”, “LEA”… pero se bloquea en la línea firstIf Target. Alternativamente, un argumento Select Case podría ser mejor. He revisado los resultados de stackoverflow en mi búsqueda “run vba when cell change” y he intentado modificar sin éxito. También he probado varios intentos de codificación en el único módulo donde tengo mis otras Subs que funcionan bien, pero agradecería ayuda con esto.

Private Sub Worksheet_Change(ByVal Target As Range)

    ' Cambiar el color interior en la celda desplegada si ciertas palabras no se ingresan en el rango A2:A1000

    If Not Intersect(Target, Range("A2:A1000")) Is Nothing Then

        If Target = "CBI" Or Target = "Fire" Or Target = "InCase" Or Target = "LEA" Then
            ActiveCell.Offset(0, 8).Interior.ColorIndex = -4142
        Else
            ActiveCell.Offset(0, 8).Interior.Color = RGB(255, 231, 255)
        End If

    End If

End Sub
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código. En primer lugar, faltan declaraciones de End If para cada instrucción If anidada. En segundo lugar, la variable Target se está utilizando incorrectamente. El código debería utilizar la propiedad Value de la celda para verificar si contiene las palabras especificadas. Por último, se debe cambiar ActiveCell.Offset(0,8) a Target.Offset(0,8) para actualizar la celda correcta.

    Aquí hay un código actualizado que debería funcionar según lo previsto:

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        'Cambiar el color de relleno en la celda desplazada si no se ingresan ciertas palabras en el rango A2:A1000
    
        If Not Intersect(Target, Range("A2:A1000")) Is Nothing Then
    
            Select Case Target.Value
                Case "CBI", "Fire", "InCase", "LEA"
                    Target.Offset(0,8).Interior.ColorIndex = -4142
                Case Else
                    Target.Offset(0,8).Interior.Color = RGB(255, 231, 255)
            End Select
    
        End If
    
    End Sub
    

    Este código utiliza una instrucción Select Case en lugar de instrucciones If anidadas, lo que facilita agregar palabras adicionales para verificar en el futuro.

Comments are closed.