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

26

Es realmente molesto que Excel (2003 y 2007) no muestre qué celda, fila o columna se selecciona cuando la ventana no está enfocada. Normalmente quiero referirme a la celda o fila actual mientras trabajo en otra aplicación.

¿Hay alguna solución o solución que haga que la celda / fila se destaque cuando no esté enfocada? Sé que puedes copiar una celda (Ctrl + C) pero es un poco cansado hacerlo siempre.

salle
fuente
2
Cntrl + C no es bueno, ya que quiero mantener el contenido de mi portapapeles
Keltari

Respuestas:

4

Creo que hay una solución, ¡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 'abandone' la celda, restablecerá el valor de fondo de la fila a blanco y luego seleccionará la nueva fila.

Agregué esto a mi Sheet1 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 había perdido el foco.

Esto puede ser molesto, ¡pero podría agregar fácilmente un botón que podría activar o desactivar esta función!

Los puntos negativos son (desde la parte superior de mi cabeza: eliminará cualquier resaltado actual que tenga. Por lo tanto, si tiene resaltado en su página (celdas de color), ¡entonces no utilice esto! ¡Además, probablemente se imprimirá con las filas resaltadas!

ingrese la descripción de la imagen aquí

Dave
fuente
2

Puedes hacer algo como esto si lo necesitas. Aunque puede ser específico de la hoja

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 de nuevo a blanco, y cambia la celda activa a amarillo. y todavía se muestra cuando la ventana no está activa. No estoy seguro de que esta sea la mejor manera, pero funciona

datatoo
fuente
2

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).

Haga clic aquí 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
bstrong
fuente
1

Use una forma para resaltar la selección.

Nota: Funciona solo 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 de ThisWorkbook (su libro de trabajo, no el código de su hoja). Esto funcionará para cada hoja en 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 puede formatear la forma a su preferencia ajustando el código.

Las ventajas son:

  • no pierde su formato original cuando se produce una falla de energía en Excel
  • No pierde su formato original cuando usa CTRL + [de otro libro de trabajo 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
cyberponk
fuente
0

En Excel 2003, la dirección de celda seleccionada actualmente se muestra en la esquina superior izquierda. Aunque la celda no está resaltada, te lleva a la mitad.

Michaelkay
fuente
0

No hay una solución permanente a este problema.

una solución alternativa (puede ser molesto en un momento) sería cambiar el resaltado de las celdas seleccionadas mientras están seleccionadas y volver a seleccionarlas nuevamente para eliminar el color.

Pegue este código en el código Sheet1 detrás y vaya a su hoja de cálculo y seleccione algunas celdas, seleccione otras y luego vuelva a seleccionar las primeras para soltar el color

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim cell As Range

    For Each cell In Target.Cells
        If cell.Interior.Color = RGB(60, 150, 230) Then
            cell.Interior.Pattern = xlNone
        Else
            cell.Interior.Color = RGB(60, 150, 230)
        End If
    Next
End Sub

fuente
0

Una solución simple que coloca un color de celda cuando cambia la selección

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Selection.Interior.ColorIndex = xlColorIndexNone
    Selection.Interior.Color = RGB(204, 204, 204)
End Sub


Una solución compleja que solo cambia el color de la celda cuando se pierde el foco

En un módulo estándar:

Option Explicit    
Public s As Range

En la (s) hoja (s) en la que desea que funcione:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set s = Selection
End Sub

En ThisWorkbook:

Private Sub Workbook_Deactivate()
    If s Is Nothing Then
        Set s = Selection
        Exit Sub
    End If
    s.Interior.ColorIndex = xlColorIndexNone
    s.Interior.Color = RGB(204, 204, 204)

    ' This is optional formatting to make the cells look more like they're actually selected
    s.Borders.Color = RGB(130, 130, 130)
    s.BorderAround _
    Color:=RGB(30, 130, 37), Weight:=xlThick
End Sub

Private Sub Workbook_Activate()
    If s Is Nothing Then
        Set s = Selection
        Exit Sub
    End If
    s.Interior.ColorIndex = xlColorIndexNone
    s.Borders.ColorIndex = xlColorIndexNone
End Sub


Citas: La solución simple se basa en una respuesta previa de @Dave ; La solución compleja se reunió de muchas fuentes, especialmente con la ayuda de @JohnColeman en esta publicación .

Travis Heeter
fuente