Mostra la selezione delle celle in Excel quando non è attivo


26

È davvero fastidioso che Excel (2003 e 2007) non mostri quale cella, riga o colonna è selezionata quando la finestra non è attiva. In genere, desidero fare riferimento alla cella o alla riga corrente mentre lavoro in un'altra applicazione.

C'è qualche soluzione o correzione che renderà la cella / riga evidenziata quando non è attiva? So che puoi copiare una cella (Ctrl + C) ma è un po 'noioso farlo ogni volta.


2
Cntrl + C non va bene, dal momento che voglio mantenere il contenuto dei miei appunti
Keltari


Risposte:


4

Penso che ci sia un modo per aggirare, ma dipende davvero dalla tua situazione!

Puoi creare una macro che si attiva quando cambia la selezione e cambia semplicemente lo sfondo di ogni cella. Quando "lasci" la cella, il valore di sfondo della riga verrà reimpostato su bianco, quindi selezionerà la nuova riga.

Ho aggiunto questo al mio Foglio1 nella finestra di Visual Basic.

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

Questa schermata è stata scattata mentre l'applicazione aveva perso la messa a fuoco.

Questo potrebbe essere fastidioso, ma potresti facilmente aggiungere un pulsante che potrebbe attivare o disattivare questa funzione!

I negativi sono (dalla cima della mia testa: rimuoverà qualsiasi evidenziazione corrente che hai. Quindi se hai evidenziazione sulla tua pagina (celle colorate), allora è meglio non usarlo! Inoltre, probabilmente verrà stampato con le righe evidenziate!

inserisci qui la descrizione dell'immagine


2

Puoi fare qualcosa del genere se necessario. Anche se potrebbe essere specifico del foglio

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

Questo cambia ciò che non è attivo di nuovo in bianco e cambia l'attivatore in giallo. e mostra ancora quando la finestra non è attiva. Non sono sicuro che sia il modo migliore, ma funziona


2

Ecco una modifica del codice da @datatoo. Legge i valori precedenti per evitare di perdere il colore di riempimento corrente. Cambia anche il colore del testo per farlo risaltare ulteriormente. L'ho aggiunto al foglio Excel nell'editor di codice (Alt-F11 da Excel).

Fare clic qui per informazioni su come effettuare un evento di modifica del foglio di lavoro.

'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

Usa una forma per evidenziare la selezione.

Nota: funziona solo quando si passa a un'altra finestra di Excel. Per ovviare al problema, puoi aprire una finestra di Excel vuota e passare a questa finestra prima di passare a un'altra applicazione per mantenere l'evidenziazione.

Aggiungilo al tuo ThisWorkbookcode (il tuo workBOOK, non il codice del tuo foglio). Questo funzionerà per ogni foglio della tua cartella di lavoro.

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

Puoi persino formattare la forma secondo le tue preferenze modificando il codice.

I vantaggi sono:

  • non si perde la formattazione originale quando Excel si arresta in modo anomalo per mancanza di corrente
  • Non si perde la formattazione originale quando si utilizza CTRL + [da un'altra cartella di lavoro che modifica il foglio attivo
  • Non perdi l'evidenziazione quando apporti modifiche all'altra finestra di Excel rispetto alla soluzione CTRL + C

0

In Excel 2003 l'indirizzo della cella attualmente selezionato viene mostrato in alto a sinistra. Sebbene la cella non sia evidenziata, ti porta a metà lì.


0

non esiste una soluzione permanente a questo problema.

una soluzione alternativa (potrebbe diventare fastidiosa in un attimo) sarebbe quella di cambiare l'evidenziazione delle celle selezionate mentre sono selezionate e ri-selezionarle nuovamente per eliminare il colore.

Inserisci questo codice nel codice Sheet1 dietro e vai al tuo foglio di calcolo e seleziona alcune celle, selezionane altre quindi seleziona nuovamente le prime per eliminare il colore

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

Una soluzione semplice che posiziona un colore di cella quando la selezione cambia

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


Una soluzione complessa che cambia il colore della cella solo quando si perde la messa a fuoco

In un modulo standard:

Option Explicit    
Public s As Range

Nel foglio / i vuoi che funzioni:

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

In 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


Citazioni: la semplice soluzione si basa su una precedente risposta di @Dave ; La complessa soluzione è stata raccolta da molte fonti, in particolare con l'aiuto di @JohnColeman in questo post .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.