Показуйте вибір комірок в 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

Це змінює те, що не є активним назад на білий, і змінює activecell на жовтий. і все ще показує, коли вікно неактивне. Не впевнений, що це найкращий спосіб, але це працює


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

Ви навіть можете відформатувати форму за вашим уподобанням, налаштувавши код.

Перевагами є:

  • ви не втрачаєте оригінального форматування, коли у вас виходять з ладу електроживлення
  • Ви не втрачаєте оригінального форматування, використовуючи 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.