Cada solución en excel puede tener ventajas así como también puede desventajas.
----
Lo que podemos asegurar es simplificar y hacer más eficientes las soluciones.
---
Por ejemplo, en tu código tienes una condición, si se cumple, entonces ejecutas esto:
Range("a2:E500").Interior.ColorIndex = 0
Si no se cumple, también ejecutas esto:
Range("a2:E500").Interior.ColorIndex = 0
Entonces, en cualquier situación la instrucción se ejecuta. Lo mejor es ponerla afuera de la condición:
Private Sub Resalta_1()
Dim R As Long
Dim C As Long
R = ActiveCell.Row
C = ActiveCell.Column
ActiveSheet.Unprotect "abc"
Range("A2:E500").Interior.ColorIndex = 0
If R >= 2 And R <= 500 And C <= 5 Then
Range("A" & R & ":E" & R).Interior.ColorIndex = 27
End If
ActiveSheet.Protect "abc"
End Sub
---
Ahora si analizas el código un poco más, podrás identificar que esto:
If R >= 2 And R <= 500 And C <= 5 Then
Es igual a esto:
A2:E500
---
Entonces podemos escribirlo de la siguiente manera:
Private Sub Resalta_2()
ActiveSheet.Unprotect "abc"
Range("A2:E500").Interior.ColorIndex = 0
If Not Intersect(ActiveCell, Range("A2:E500")) Is Nothing Then
Range("A" & ActiveCell.Row & ":E" & ActiveCell.Row).Interior.ColorIndex = 27
End If
ActiveSheet.Protect "abc"
End Sub
---
Si revisas nuevamente, podemos identificar que tu rango de trabajo es: "A2:E500", y en el código aparece 2 veces.
Podemos escribirlo así, para escribir solamente una vez el rango:
Private Sub Resalta_3()
Dim rng As Range
Set rng = Range("A2:E500")
ActiveSheet.Unprotect "abc"
rng.Interior.ColorIndex = 0
If Not Intersect(ActiveCell, rng) Is Nothing Then
Range("A" & ActiveCell.Row & ":E" & ActiveCell.Row).Interior.ColorIndex = 27
End If
ActiveSheet.Protect "abc"
End Sub
---