当窗口未处于焦点状态时,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 窗口进行更改时,不会丢失高亮显示