Mostrar la selección de celda en Excel cuando no está enfocada

Mostrar la selección de celda en Excel cuando no está enfocada

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.

ingrese la descripción de la imagen aquí

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

información relacionada