Показывать выделение ячейки в Excel, когда она не в фокусе

Показывать выделение ячейки в Excel, когда она не в фокусе

Очень раздражает, что Excel (2003 и 2007) не показывает, какая ячейка, строка или столбец выбраны, когда окно не в фокусе. Обычно я хочу обратиться к текущей ячейке или строке, работая в другом приложении.

Есть ли обходной путь или исправление, которое сделает ячейку/строку выделенной, когда она не в фокусе? Я знаю, что можно скопировать ячейку (Ctrl+C), но делать это каждый раз немного утомительно.

решение1

Я думаю, что есть способ обойти это, но все зависит от вашей ситуации!

Вы можете создать макрос, который срабатывает при изменении выделения и просто меняет фон каждой ячейки. Когда вы «покинете» ячейку, он сбросит значение фона строки на белый, а затем выберет новую строку.

Я добавил это на свой Лист1 в окне Visual Basic.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells.Interior.ColorIndex = xlColorIndexNone
    ActiveCell.EntireRow.Interior.ColorIndex = 34
End Sub

Этот снимок экрана был сделан, когда приложение потеряло фокус.

Это может раздражать, но вы можете легко добавить кнопку, которая будет включать и выключать эту функцию!

Минусы (первое, что пришло мне в голову): он удалит все имеющиеся у вас выделения. Так что если на вашей странице есть выделения (ячейки окрашены), то лучше не используйте его! Кроме того, он, скорее всего, напечатает выделенные строки!

введите описание изображения здесь

решение2

Вот модификация кода от @datatoo. Он считывает предыдущие значения, чтобы не потерять текущий цвет заливки. Он также изменяет цвет текста, чтобы сделать его более заметным. Я добавил его на лист Excel в редакторе кода (Alt-F11 из Excel).

Нажмитездесьдля получения информации о создании события изменения рабочего листа.

'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

решение3

Вы можете сделать что-то вроде этого, если вам нужно. Хотя это может быть связано с конкретным листом

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

Это меняет то, что не активно, обратно на белое, и меняет активную ячейку на желтую. и все еще отображается, когда окно не активно. Не уверен, что это лучший способ, но он работает

решение4

Используйте форму, чтобы выделить выделенный фрагмент.

Примечание: это работает только при переключении в другое окно Excel. В качестве обходного пути вы можете открыть пустое окно Excel и переключиться на это окно перед переключением в другое приложение, чтобы сохранить выделение.

Просто добавьте это к вашему ThisWorkbookcode (ваша workBOOK, а не код вашего листа). Это будет работать для каждого листа в вашей рабочей книге.

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

Вы даже можете отформатировать форму по своему усмотрению, изменив код.

Преимущества:

  • Вы не потеряете исходное форматирование при сбое Excel или отключении питания.
  • Вы не теряете исходное форматирование при использовании CTRL+[ из другой рабочей книги, которая изменяет активный лист.
  • Вы не теряете выделение при внесении изменений в другое окно Excel по сравнению с решением CTRL+C.

Связанный контент