Problemas con macro

Hola Fernando!
Tengo el siguiente código, su función es que cuando selecciono una celda, se sombrea a toda la fila, como una ayuda visual únicamente, pero cuando selecciono una hoja, borran todos los formatos de color.
Te agradecería me indicaras como solventar este problema.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = 1 Then
Target.Cells.ColorIndex = True
Cells.Interior.ColorIndex = 0
Target.EntireColumn.Interior.ColorIndex = 0
Target.EntireRow.Interior.ColorIndex = 6
End If
End Sub
También tengo esta macro que tengo habilitada con la tecla TAB,
Sub JTMM_12()
Application.OnKey "{TAB}", "Macro41"
End sub
Sub Macro41()
Selection.Copy
End Sub
La primera rutina de color, anula a la segunda macro que es la de copiado.
Si tienes alguna idea de cómo puedan funcionar las l macros sin que haya conflicto entre las dos te lo voy a agradecer mucho.
Recibe un fuerte abrazo
José Medina Maciel

1 Respuesta

Respuesta
1
Vamos por partes.
La macro que mencionas, antes de "iluminar" la fila de la celda seleccionada, elimina los colores de fondo de todas las celdas de la hoja (a grosso modo, por decir)
La macro que te propongo, elimina los colores de fondo de la última fila donde haya estado iluminada. Desde luego, todos los fondos de tal fila quedarán en blanco, pero respetará los que tenga el resto de la hoja.
Adicionalmente, incorpora un control, consultando una variable que indica si la tecla TAB fue presionada. A su vez modifiqué la macro "macro41" creándole un ámbito de protección donde se podrán ejecutar los comandos de copiado y otros. Pero es importante que el resto de los comandos estén dentro de ese entorno, pues -al salir de él- esta macro le devuelve a la otra su funcionalidad habitual.
Por lo tanto, José, si estás de acuerdo, reemplaza aquellas macros por esta:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static FilaAnt
If Target.Cells.Count = 1 Then
'Target.Cells.ColorIndex = True
If Not IsEmpty(FilaAnt) Then Rows(FilaAnt).Interior.ColorIndex = 0
If Not Copiando Then
Target.EntireColumn.Interior.ColorIndex = 0
Target.EntireRow.Interior.ColorIndex = 6
FilaAnt = Target.Row
Else
DoEvents
End If
End If
End Sub
---
y, también, estas otras:
Public Copiando As Boolean
Sub JTMM_12()
Application.OnKey "{TAB}", "Macro41"
End Sub
Sub Macro41()
Copiando = True
Application.EnableEvents = False
Selection.Copy
' AQUÍ debes agregar los comandos siguientes al copiado
' por ejemplo:
Range("A8"). Select 'nota que cambia la selección de celda pero no la ilumina, pues aquel evento está suspendido momentaneamente
ActiveSheet. Paste
Application.EnableEvents = True
Copiando = False
End Sub
Espero que esto te satisfaga.
Un abrazo!
Fernando
Hola Fernando !
Recibí tu respuesta y me parece excelente, me tarde un poco en entenderle, en si, es más que suficiente con tu propuesta.
Mil gracias
Jose Medina Maciel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas