
É realmente irritante que o Excel (2003 e 2007) não mostre qual célula, linha ou coluna está selecionada quando a janela não está em foco. Normalmente quero me referir à célula ou linha atual enquanto trabalho em outro aplicativo.
Existe alguma solução alternativa ou correção que destaque a célula/linha quando não estiver em foco? Eu sei que você pode copiar uma célula (Ctrl+C), mas é meio cansativo fazer isso sempre.
Responder1
Acho que há uma solução alternativa, mas realmente depende da sua situação!
Você pode criar uma macro que é acionada quando a seleção muda e simplesmente altera o plano de fundo de cada célula. Quando você 'sai' da célula, o valor de fundo da linha será redefinido para branco e, em seguida, a nova linha será selecionada.
Adicionei isso à minha Planilha1 na janela do Visual Basic.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Interior.ColorIndex = xlColorIndexNone
ActiveCell.EntireRow.Interior.ColorIndex = 34
End Sub
Esta captura de tela foi tirada enquanto o aplicativo perdia o foco.
Isso pode ser irritante, mas você pode facilmente adicionar um botão que pode ativar ou desativar esse recurso!
Os negativos são (do topo da minha cabeça: isso removerá qualquer destaque atual que você tenha. Portanto, se você tiver destaque em sua página (células coloridas), é melhor não usar isso! Além disso, provavelmente será impresso com as linhas destacadas!
Responder2
Aqui está uma modificação do código de @datatoo. Ele lê os valores anteriores para evitar a perda da cor de preenchimento atual. Ele também altera a cor do texto para destacá-lo ainda mais. Adicionei-o à planilha do Excel no editor de código (Alt-F11 do Excel).
Cliqueaquipara obter informações sobre como fazer um evento de alteração de planilha.
'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
Responder3
Você pode fazer algo assim se precisar. Embora possa ser específico da folha
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
Isso altera o que não está ativo de volta para branco e altera a célula ativa para amarelo. e ainda mostra quando a janela não está ativa. Não tenho certeza se esta é a melhor maneira, mas funciona
Responder4
Use uma forma para destacar a seleção.
Nota: Funciona apenas ao mudar para outra janela do Excel. Como solução alternativa, você pode abrir uma janela vazia do Excel e alternar para esta janela antes de alternar para outro aplicativo para manter o destaque.
Basta adicionar isso ao seu ThisWorkbookcode (seu workBOOK, não ao código da sua planilha). Isso funcionará para todas as planilhas da sua pasta de trabalho.
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
Você pode até formatar a forma de acordo com sua preferência, ajustando o código.
As vantagens são:
- você não perde sua formatação original quando o Excel trava ou há uma falha de energia
- Você não perde a formatação original ao usar CTRL+[ de outra pasta de trabalho que altera a planilha ativa
- Você não perde o destaque ao fazer alterações na outra janela do Excel em comparação com a solução CTRL+C