
Es realmente molesto que Excel (2003 y 2007) no muestre qué celda, fila o columna está seleccionada cuando la ventana no está enfocada. Normalmente quiero hacer referencia a la celda o fila actual mientras trabajo en otra aplicación.
¿Existe alguna solución alternativa que haga que la celda/fila se resalte cuando no esté enfocada? Sé que puedes copiar una celda (Ctrl+C), pero es un poco tedioso hacerlo cada vez.
Respuesta1
Creo que hay una solución alternativa, pero realmente depende de tu situación.
Puede crear una macro que se active cuando cambie la selección y simplemente cambie el fondo de cada celda. Cuando "salgas" de la celda, se restablecerá el valor de fondo de la fila a blanco y luego se seleccionará la nueva fila.
Agregué esto a mi Hoja1 en la ventana de Visual Basic.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlColorIndexNone
ActiveCell.EntireRow.Interior.ColorIndex = 34
End Sub
Esta captura de pantalla se tomó mientras la aplicación perdía el foco.
Esto puede ser molesto, pero puedes agregar fácilmente un botón que pueda activar o desactivar esta función.
Los negativos son (desde la parte superior de mi cabeza: eliminará cualquier resaltado actual que tenga. Entonces, si tiene resaltado en su página (celdas de color), ¡es mejor que no use esto! Además, probablemente se imprimirá con las filas resaltadas.
Respuesta2
Aquí hay una modificación del código de @datatoo. Lee los valores anteriores para evitar perder el color de relleno actual. También cambia el color del texto para que se destaque aún más. Lo agregué a la hoja de Excel en el editor de código (Alt-F11 de Excel).
Hacer clicaquípara obtener información sobre cómo realizar un evento de cambio de hoja de trabajo.
'VBA code for Excel to show active cell in worksheet when worksheet is out of focus
Dim wasActive As String
Dim originalFillColor As String
Dim originalTextColor As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Set up colors on load
If wasActive = Empty Then
wasActive = "A1"
originalFillColor = Range(wasActive).Interior.Color
originalTextColor = Range(wasActive).Font.Color
End If
'Reset previous cell to original color values; If statement prevents removal of grid lines by using "0" for clear fill color when white
If originalFillColor = 16777215 Then
Range(wasActive).Interior.ColorIndex = "0"
Range(wasActive).Font.Color = originalTextColor
Else
Range(wasActive).Interior.Color = originalFillColor
Range(wasActive).Font.Color = originalTextColor
End If
'Set new colors and change active cell to highlighted colors (black fill with white text)
originalFillColor = ActiveCell.Interior.Color
originalTextColor = ActiveCell.Font.Color
wasActive = ActiveCell.Address
ActiveCell.Interior.ColorIndex = "1"
ActiveCell.Font.ColorIndex = "2"
End Sub
Respuesta3
Puedes hacer algo como esto si es necesario. Aunque podría ser una hoja específica
Dim wasActive As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If wasActive = Empty Then wasActive = "A1"
Range(wasActive).Interior.ColorIndex = "0"
ActiveCell.Interior.ColorIndex = "6"
wasActive = ActiveCell.Address
End Sub
Esto cambia lo que no está activo nuevamente a blanco y cambia la celda activa a amarilla. y todavía se muestra cuando la ventana no está activa. No estoy seguro de que esta sea la mejor manera, pero funciona.
Respuesta4
Utilice una forma para resaltar la selección.
Nota: solo funciona cuando se cambia a otra ventana de Excel. Como solución alternativa, puede abrir una ventana de Excel vacía y cambiar a esta ventana antes de cambiar a otra aplicación para mantener el resaltado.
Simplemente agregue esto a su código ThisWorkbook (su LIBRO de trabajo, no el código de su hoja). Esto funcionará para cada hoja de su libro de trabajo.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
DeleteSelectionHighlight
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
DeleteSelectionHighlight
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
On Error Resume Next
Dim shp As Shape
Application.ScreenUpdating = False
Set shp = ActiveSheet.Shapes("SelectionHighlight")
If Err.Number <> 0 Then
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 1, 1, 1, 1)
With shp 'Format shape to your preference
.Name = "SelectionHighlight"
.Line.ForeColor.RGB = RGB(226, 0, 0) ' Border color
.Line.Weight = 1.5
.Line.DashStyle = msoLineSolid
.Fill.Visible = msoFalse 'No background
'.Fill.ForeColor.RGB = RGB(0, 153, 0) 'Background color
'.Fill.Transparency = 0.95 'Background transparency
End With
End If
Dim oldZoom As Integer
oldZoom = Wn.Zoom
Wn.Zoom = 100 'Set zoom at 100% to avoid positioning errors
With shp
.Top = Wn.Selection.Top 'Tweak the offset to fit your desired line weight
.Left = Wn.Selection.Left 'Tweak the offset to fit your desired line weight
.Height = Wn.Selection.Height
.Width = Wn.Selection.Width
End With
Wn.Zoom = oldZoom 'Restore previous zoom
Application.ScreenUpdating = True
End Sub
Private Sub DeleteSelectionHighlight()
On Error Resume Next
Dim shp As Shape
Set shp = ActiveSheet.Shapes("SelectionHighlight")
shp.Delete
End Sub
Incluso puedes formatear la forma según tus preferencias modificando el código.
Las ventajas son:
- No pierdes tu formato original cuando Excel falla o tienes un corte de energía.
- No pierde su formato original cuando usa CTRL+[ desde otro libro que cambia la hoja activa
- No pierde el resaltado al realizar cambios en la otra ventana de Excel en comparación con la solución CTRL+C