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


26

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

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


2
Cntrl + C не годится, так как я хочу сохранить содержимое буфера обмена
Keltari


Ответы:


4

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

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

Я добавил это к моему Sheet1 в окне Visual Basic.

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

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

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

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

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


2

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

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

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


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

1

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

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

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

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

0

В Excel 2003 текущий выбранный адрес ячейки отображается в левом верхнем углу. Хотя клетка не подсвечена, она частично вас туда доставит.


0

нет постоянного решения этой проблемы.

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

Вставьте этот код в код Sheet1 и перейдите к вашей электронной таблице и выберите несколько ячеек, выберите другие, а затем снова выберите первые, чтобы оставить цвет

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

0

Простое решение, которое помещает цвет ячейки при изменении выделения

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


Комплексное решение, которое меняет цвет ячейки только при потере фокуса

В стандартном модуле:

Option Explicit    
Public s As Range

В листе (ах) вы хотите, чтобы он работал в:

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

В 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


Цитирование: Простое решение базируется на предыдущем ответе по @ Dave ; Комплексное решение было собрано из многих источников, особенно с помощью @JohnColeman в этом посте .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.