Pokaż zaznaczenie komórki w programie Excel, gdy nie jest ostry

26

Naprawdę denerwujące jest to, że Excel (2003 i 2007) nie pokazuje, która komórka, wiersz lub kolumna jest zaznaczona, gdy okno nie jest aktywne. Zazwyczaj chcę odwoływać się do bieżącej komórki lub wiersza podczas pracy w innej aplikacji.

Czy istnieje jakieś obejście lub poprawka, która wyróżnia komórkę / wiersz, gdy nie jest ostra? Wiem, że możesz skopiować komórkę (Ctrl + C), ale jest to trochę męczące za każdym razem.

salle
źródło
2
Cntrl + C nie jest dobry, ponieważ chcę zachować zawartość schowka
Keltari

Odpowiedzi:

4

Myślę, że jest jakieś rozwiązanie, ale to naprawdę zależy od twojej sytuacji!

Możesz utworzyć makro, które będzie uruchamiane, gdy zmieni się zaznaczenie, i po prostu zmienia tło każdej komórki. Kiedy „opuścisz” komórkę, wartość tła wiersza zostanie zresetowana na białą, a następnie wybierz nowy wiersz.

Dodałem to do mojego Arkusza1 w oknie Visual Basic.

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

Ten zrzut ekranu został zrobiony, gdy aplikacja utraciła ostrość.

Może to być denerwujące, ale możesz łatwo dodać przycisk, który może włączać lub wyłączać tę funkcję!

Negatywy to (z góry mojej głowy: usunie wszystkie obecne podświetlenia. Więc jeśli masz podświetlenia na stronie (kolorowe komórki), to lepiej nie używaj tego! Również prawdopodobnie wydrukuje się z podświetlonymi wierszami!

wprowadź opis zdjęcia tutaj

Dave
źródło
2

Jeśli chcesz, możesz zrobić coś takiego. Chociaż może być specyficzny dla arkusza

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

Zmienia to, co nie jest aktywne, z powrotem na biały i zmienia komórkę aktywującą na żółty. i nadal pokazuje, gdy okno nie jest aktywne. Nie jestem pewien, czy to najlepszy sposób, ale działa

datatoo
źródło
2

Oto modyfikacja kodu z @datatoo. Odczytuje poprzednie wartości, aby zapobiec utracie bieżącego koloru wypełnienia. Zmienia również kolor tekstu, aby go jeszcze bardziej wyróżniać. Dodałem go do arkusza Excela w edytorze kodu (Alt-F11 z Excela).

Kliknij tutaj, aby uzyskać informacje o tworzeniu zdarzenia zmiany arkusza roboczego.

'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
silny
źródło
1

Użyj kształtu, aby podświetlić wybór.

Uwaga: Działa tylko podczas przełączania do innego okna programu Excel. Aby obejść ten problem, możesz otworzyć puste okno programu Excel i przejść do tego okna przed przejściem do innej aplikacji.

Po prostu dodaj to do kodu ThisWorkbook (twój workBOOK, a nie kod arkusza). Będzie to działać dla każdego arkusza w skoroszycie.

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

Możesz nawet sformatować kształt według własnych preferencji, dostosowując kod.

Zalety to:

  • nie stracisz oryginalnego formatowania, gdy awaria programu Excel spowoduje awarię zasilania
  • Nie tracisz oryginalnego formatowania, używając CTRL + [z innego skoroszytu, który zmienia aktywny arkusz
  • Nie tracisz wyróżnienia podczas wprowadzania zmian w drugim oknie programu Excel w porównaniu z rozwiązaniem CTRL + C.
cyberponk
źródło
0

W programie Excel 2003 aktualnie wybrany adres komórki jest wyświetlany w lewym górnym rogu. Chociaż komórka nie jest podświetlona, ​​prowadzi do niej.

Michaelkay
źródło
0

nie ma trwałego rozwiązania tego problemu.

obejściem (może stać się denerwujące za chwilę) byłoby zmiana podświetlenia wybranych komórek podczas ich wybierania i ponowne wybranie ich ponownie, aby upuścić kolor.

Przyklej ten kod do kodu Arkusza1 i przejdź do arkusza kalkulacyjnego i wybierz niektóre komórki, wybierz inne, a następnie ponownie wybierz pierwsze, aby upuścić kolor

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

źródło
0

Proste rozwiązanie, które umieszcza kolor komórki po zmianie zaznaczenia

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


Złożone rozwiązanie, które zmienia kolor komórki tylko w przypadku utraty ostrości

W standardowym module:

Option Explicit    
Public s As Range

W arkuszach chcesz pracować:

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

W 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


Cytaty: Proste rozwiązanie opiera się na poprzedniej odpowiedzi przez @Dave ; Złożone rozwiązanie zostało zebrane z wielu źródeł, zwłaszcza przy pomocy @JohnColeman w tym poście .

Travis Heeter
źródło