Saltar al contenido

Colorear facilmente fila activa


Gerson Pineda

Recommended Posts

publicado

Hola

Es casi seguro que hay algo similar por el foro, pero de igual modo adjunto lo siguiente

Colorear facilmente una fila

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Rem conseguimos la ultima celda ocupada de la columna A
uf = Range("A" & Rows.Count).End(xlUp).Row
Rem trabajaremos con Target/Objetivo
With Target
Rem si la columna activa se localiza despues de la columna E
Rem si la fila activa es menor que 5
Rem si la fila activa es mayor que uf (ultima fila ocupada)
Rem >>> entonces salir de la rutina
If .Column > 5 Or .Row < 5 Or .Row > uf Then Exit Sub
Rem trabajando con el rango Range("A5:E" & uf)
With Range("A5:E" & uf)
Rem ningun color
.Interior.ColorIndex = xlNone
Rem negrita desactivada
.Font.Bold = False
End With
Rem trabajar con la celda/fila activa
With Range(Cells(.Row, 1), Cells(.Row, 5))
Rem color a 6 (amarillo)
.Interior.ColorIndex = 6
Rem negrita activada
.Font.Bold = True
End With
End With
End Sub
[/PHP]

Espero sea de utilidad

Saludos desde Honduras

Colorear facilmente una fila.zip

publicado

Estimado Gerson,

Gracias por el aporte y también por explicar el código para los mortales que nos vamos iniciando, para que lo podamos estudiar y aplicar.

Saludos.

publicado

muy bien... amigo gerson... pero a raiz de eso te hago una consulta.. el formato de relleno de celdas(relleno), si tengo un color dentro del rango donde se ejecuta la macro, se borra, como seria para que no se borre el color que ya tenia anteriormente, bueno como sugerencia yo trataría de en vez de color de relleno sea un color dado por un formato condicional de relleno de color de celda... lo malo es que no se como... jejje te lo dejo haber si puedes hacerle unas modificaciones...

pero esta muy bien tu aporte...

gracias

publicado

Hola! julio césar (Gerson y Killer).

Por decirlo de algún modo: El título del presente aporte nos exime de mayores comentarios. Es decir:

[DBOX]https://www.ayudaexcel.com/foro/ideas-aportes/19403-colorear-facilmente-fila-activa.html[/DBOX]

Y "fácilmente" excluye la opción formato condicional (jejejejeje).

Sin embargo, como aporte adicionado a lo Gerson con varias de sus líneas tomadas "prestadas", puedes ver la variante formato condicional en el archivo adjunto.

Saludos para todos.

Colorear facilmente una fila.xls

publicado

Julio que tal

Pues ya se me adelanto (gratamente) el gran Cacho... y solo siguiendo con su idea, tambien creo que funciona algo asi:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim uf As Long
uf = Range("A" & Rows.Count).End(xlUp).Row
With Target
Range("A5:E" & uf).FormatConditions.Delete
If .Column > 5 Or .Row < 5 Or .Row > uf Then Exit Sub
With Range(Cells(.Row, "A"), Cells(.Row, "E"))
.FormatConditions.Add Type:=xlExpression, Formula1:=.Row = .Row
With .FormatConditions(1)
.Font.Bold = True
.Interior.ColorIndex = 6
End With
End With
End With
End Sub[/PHP]

[color=#A9A9A9][i]Notaron el pequeño/leve/insignificante cambio en el codigo [/i][/color]:adoration:[color=#a9a9a9][i]jeje[/i][/color]

Abrazos y muchos afectos killer/cacho/julio

Saludos desde Honduras

publicado

Hola! Amigos.

Siempre "algo queda en el tintero", pues la inteligente corrección de Gerson:

Formula1:=.Row = .Row

la podemos llevar a:

Formula1:=True

Ahora bien: se me ocurre útil indagar sobre los parecidos, las ventajas y las desventajas de los métodos propuestos por Gerson (Método G) y por ioyama/KL (Método ioK)

1º) Semejanzas. Ambos métodos se basan en el formato condicional y en macros (el evento Worksheet_SelectionChange).

2º) Ventajas y desventajas.

a) El método ioK es el indicado para una tabla de datos fija, mientras que el método G es dinámico y se acomoda al tamaño de la tabla de datos.

B) El método "ioK" siempre entregará un archivo más grande que el "G", pues el ámbito de las fórmulas condicionales del método "ioK" es toda la tabla, mientras que para el método "G", es sólo la fila activa.

c) El método "ioK" acepta copiar una celda de la tabla (o de la hoja) y pegarla en otra celda de la misma tabla. El "G" falla en ese intento.

¿La razón de ello?... pues que el método "ioK" -por ser estático- ya tiene predefinidos los formatos a aplicar. En cambio, el método "G" lo va redefiniendo en cada selección de celda.

Lo que provoca "la diferencia" es:

.Font.Bold = True

Al quitar esa propiedad ambos métodos permiten copiar y pegar "internamente", salvo que el método "ioK" resaltará las celdas con "negrita" y con color de relleno, mientras que el método "G" sólo lo hará con este segundo efecto.

__________________

En resumen:

El método "ioK" requiere la macro:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = True
End Sub[/PHP]

más la fórmula de formato condicional:

[color=#ff8c00][b]= Fila() = Celda("fila")[/b][/color]

(no he podido comprobar si esta forma es operativa para Excel en inglés)

mientras que el método "G" requiere de la macro:

[PHP]Private Sub Worksheet_SelectionChange1(ByVal Target As Range)
Dim uf As Long
uf = Range("A" & Rows.Count).End(xlUp).Row
With Target
Range("A5:E" & uf).FormatConditions.Delete
If .Column > 5 Or .Row < 5 Or .Row > uf Then Exit Sub
With Range(Cells(.Row, "A"), Cells(.Row, "E"))
.FormatConditions.Add Type:=xlExpression, Formula1:=True
With .FormatConditions(1)
.Interior.ColorIndex = 6
End With
End With
End With
End Sub[/PHP]

y -en principio- no requiere "customización".

¡Bienvenido cualquier corrección y/o aporte adicional y/o comprobaciones en distintos idiomas!

Saludos, Cacho R.

publicado

Cacho

Haciendo pruebas a lo que mencionas sobre copy/paste, creo que la diferencia no es ".Font.Bold = True" si no mas bien "Exit Sub", pues con ello perdemos nuestro portapapeles, la cuestion seria como recuperarlo, se te ocurre algo? o alguien mas sabe como?

Y sobre esto

======================================================

= Fila() = Celda("fila")

(no he podido comprobar si esta forma es operativa para Excel en inglés)

======================================================

No va funcionar mas que en version "Español"

pd que interesante se puso este testeo!

Saludos nuevamente

publicado

¡Gracias! Gerson por investigar el tema del cambio de idioma.

Como esa variante para tablas fijas es sencilla de implementar (y por lo tanto práctica), deberíamos encontrar una variante válida y no dependiente del idioma del Excel.

En cuanto a lo del ".Font.Bold = True" sospecho que me quieres confundir... ¡Pero no lo lograrás! (jajajajaaj).

A ver: ¿Intentaste con tu propio archivo y el código del mensaje #8?

(Ojo que está asociado a un inexistente "Worksheet_SelectionChange1")

Saludos, Cacho R.

publicado
¡Gracias! Gerson por investigar el tema del cambio de idioma.

Como esa variante para tablas fijas es sencilla de implementar (y por lo tanto práctica), deberíamos encontrar una variante válida y no dependiente del idioma del Excel.

En cuanto a lo del ".Font.Bold = True" sospecho que me quieres confundir... ¡Pero no lo lograrás! (jajajajaaj).

A ver: ¿Intentaste con tu propio archivo y el código del mensaje #8?

(Ojo que está asociado a un inexistente "Worksheet_SelectionChange1")

Saludos, Cacho R.

Cacho como te va!

Voy por partes...

- La variante tu mismo terminaste de hacerla mas sencilla "Formula1:=True" lo recuerdas? pues funcionara en todos los idiomas

- Con o sin el famoso ".Font.Bold = True" siempre puedo copiar, pero posicionandome con el raton fuera de la tabla y le doy paste/pegar (ojo no copia el formato condicional)

- Y al respecto de ...."Worksheet_SelectionChange1") no me funcionaba hasta que (la tercera vez jaja) mire que me habias hecho una mala jugada jajaja ("me la debes!") y elimine el 1 jajaja

Saludos mi estimado (que pases un feliz/gran fin de semana)

publicado
tranquilos mis amigos... esto parece furia de titanes... jejejej

Hola! Julio (y Gerson).

Ya que mencionas a Furia de Titanes, mira la cara de Gerson después de probar -tres veces- que su Excel ya no respondía al evento SelectionChange:

[ATTACH]25300.vB[/ATTACH]

¡Sorry...! ¡Sorry...! ¡Sorry...! ¡Sorry...! ¡Sorry...! ¡Sorry...! ¡Sorry...!

Es que cuando estoy comparando códigos, suelo numerarlos:

Private Sub Worksheet_SelectionChange1(ByVal Target As Range)

Private Sub Worksheet_SelectionChange2(ByVal Target As Range)

Private Sub Worksheet_SelectionChange3(ByVal Target As Range)

y les voy quitando el "numerito" a medida que los voy utilizando.

Obviamente: ¡me olvidé de quitárselo al tiempo de copiar esa versión al mensaje!

¡Sorry...! ¡Sorry...! ¡Sorry...! ¡Sorry...! ¡Sorry...! ¡Sorry...! ¡Sorry...!

Del mismo modo: que pasen un muy lindo fin de semana.

Saludos, Cacho R.

post-78958-145877003536_thumb.jpg

publicado

Un momento, un momento que falto yo........


Dim Fila As Long
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row = Fila Then Exit Sub
If Target.Rows.Count = 1 Then
If Fila <> 0 Then
Rows(Rows.Count).Copy Rows(Fila)
Rows(Rows.Count).Clear
End If
Fila = Target.Row
Rows(Target.Row).Copy Rows(Rows.Count)
Rows(Target.Row).Interior.Color = vbYellow
End If
End Sub
[/CODE]

Antes de "pintar" la fila de amarillo nos la guardamos en la última fila, y en el siguiente ciclo, si el nº de fila ha cambiado, restituimos la fila anterior.

Saudiños dende Santiago

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.