关于如何设置突出显示的水平行/窗口,当我上下滚动行时,该行/窗口保持在屏幕上的相同固定位置,有什么建议吗?我想到的是一种水平冻结窗格,当行在滚动时经过它时,可以突出显示行。为了更清楚,假设现在我突出显示了第 20 行。如果我向下滚动 1 行,现在我会突出显示第 21 行,依此类推。就像我在显示器上贴了一条彩色透明胶带,当行从胶带下面经过时,它们就会突出显示。是否可以设置宏或 VBA 代码来执行此操作?
答案1
主要的挑战是检测滚动事件(详情请见 CPearson.com)
如果您想使用向上和向下箭头(仅限键盘)滚动,请尝试下面的代码
在 ThisWorkbook 模块中添加:
Option Explicit
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
HighlightCurrentRow Sh, Target
Application.EnableEvents = True
End Sub
在标准模块中添加:
Option Explicit
Public Sub HighlightCurrentRow(ByVal Sh As Object, ByVal Target As Range)
Dim ur As Range, thisRow As Long, prevRow As Long, found As Range
Dim back1 As Long, fore1 As Long, back2 As Long, fore2 As Long
back2 = RGB(111, 0, 0) 'Background color - dark red
fore2 = RGB(255, 255, 0) 'Foreground color - yellow
Set ur = Sh.UsedRange
thisRow = Target.Row
Application.FindFormat.Interior.Color = back2
Set found = ur.Cells.Find(What:="", After:=ur.Cells(1), SearchFormat:=True)
If Not found Is Nothing Then
prevRow = IIf(found.Row < ur.Rows.Count, found.Row + 1, found.Row - 1)
back1 = ur.Cells(prevRow, ur(1).Column).Interior.Color
fore1 = ur.Cells(prevRow, ur(1).Column).Font.Color
ur.Rows(found.Row).Interior.Color = back1
ur.Rows(found.Row).Font.Color = fore1
End If
If Target.Row > 1 And Not Intersect(ur, Target) Is Nothing Then
If thisRow > 15 Then Application.ActiveWindow.ScrollRow = thisRow - 15
ur.Rows(thisRow).Interior.Color = back2
ur.Rows(thisRow).Font.Color = fore2
End If
End Sub
现在,在任何工作表上,当您单击包含数据的单元格时,整行将以深红色背景和黄色字体突出显示
如果活动单元格位于第 16 行或更高行,则窗口将向上或向下滚动(滚动行偏移 15 行),并且活动行将突出显示,但如果单元格位于 UsedRange 之外,则不会突出显示任何行
答案2
@design95,根据您的需求,我想向您展示如何突出显示从第 1 行开始算起的每 20 行。
按着这些次序。
- 选择数据范围,如 (A1:Az1000)。
- 转到条件格式。
- 点击新规则并选择使用公式格式的选项。
- 写下这个公式。
=AND(($A1=1),MOD(ROW($A1),20)=0)
- 最后选择填充颜色和其他。
注意:值 20 是行号,可以根据需要替换为其他值。
接下来是如何突出显示您选择的行或活动行。
按照前面四个步骤,写出这个公式,
=CELL("行")=ROW()
完成选择颜色和其他内容。
最后一个是,右键单击 Sheet TAB,点击查看代码并编写这个简单的代码。
Private Sub Worksheet_SelectionChange(ByVal 目标作为范围)
应用程序.计算
子目录结束
希望这对你有帮助。请发表你的评论。