当不在焦点时在 Excel 中显示单元格选择

当不在焦点时在 Excel 中显示单元格选择

当窗口未处于焦点状态时,Excel(2003 和 2007)不显示所选单元格、行或列,这真的很烦人。我通常想在其他应用程序中工作时引用当前单元格或行。

是否有任何解决方法或修复可以让单元格/行在未聚焦时突出显示?我知道您可以复制单元格(Ctrl+C),但每次都这样做有点累人。

答案1

我认为有一个解决办法,但这确实取决于你的情况!

您可以创建一个宏,当选择发生变化时触发,它只会更改每个单元格的背景。当您“离开”单元格时,它会将行的背景值重置为白色,然后选择新行。

我将其添加到 Visual Basic 窗口中的 Sheet1 中。

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

此屏幕截图是在应用程序失去焦点时拍摄的。

这可能很烦人,但您可以轻松添加一个按钮来打开或关闭此功能!

缺点是(我认为的缺点是:它会删除您当前的所有突出显示。因此,如果您的页面上有突出显示(单元格为彩色),则最好不要使用它!此外,它可能会打印突出显示的行!

在此处输入图片描述

答案2

这是对 @datatoo 代码的修改。它读取以前的值以防止丢失当前填充颜色。它还更改文本颜色以使其更加突出。我在代码编辑器中将其添加到 Excel 工作表中(在 Excel 中按 Alt-F11)。

点击这里有关制作工作表变更事件的信息。

'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

答案3

如果需要,您可以执行类似操作。尽管它可能特定于工作表

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

这会将非活动内容重新变为白色,并将活动单元格变为黄色。窗口不活动时仍会显示。不确定这是否是最好的方法,但它确实有效

答案4

使用形状来突出显示选择。

注意:此功能仅在切换到另一个 Excel 窗口时有效。作为一种解决方法,您可以打开一个空的 Excel 窗口并切换到此窗口,然后再切换到另一个应用程序以保持突出显示。

只需将其添加到您的 ThisWorkbookcode(您的工作簿,而不是您的工作表代码)即可。这将适用于您工作簿中的每个工作表。

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+[ 从另一个更改活动工作表的工作簿中时,不会丢失原始格式
  • 与 CTRL+C 解决方案相比,在对其他 Excel 窗口进行更改时,不会丢失高亮显示

相关内容