在不使用VBA的情况下突出显示Excel中的活动行/列?

时间:2014-03-12 11:00:55

标签: excel vba highlight

我想要实现的是突出显示活动的行或列。我使用了VBA解决方案,但每次使用Selection_change事件时,我都没有机会撤消工作表中的任何更改。

有没有办法以某种方式突出显示活动行/列而不使用VBA?

8 个答案:

答案 0 :(得分:27)

您可以获得的最佳效果是使用条件格式。

创建两个基于公式的规则:

  1. =ROW()=CELL("row")
  2. =COLUMN()=CELL("col")
  3. 如图所示:

    enter image description here

    唯一的缺点是每次选择单元格时都需要重新计算工作表。 (您可以按" F9")

答案 1 :(得分:15)

我不认为可以在不使用VBA的情况下完成,但可以完成而不会丢失撤消历史记录:

在VBA中,将以下内容添加到工作表对象中:

Public SelectedRow as Integer
Public SelectedCol as Integer

Private Sub Worksheet_SelectionChange(ByVal Target as Range)
    SelectedRow = Target.Row
    SelectedCol = Target.Column
    Application.CalculateFull ''// this forces all formulas to update
End Sub

创建一个新的VBA模块并添加以下内容:

Public function HighlightSelection(ByVal Target as Range) as Boolean
    HighlightSelection = (Target.Row = Sheet1.SelectedRow) Or _
        (Target.Column = Sheet1.SelectedCol)
End Function

最后,使用条件格式来突出显示基于' HighlightSelection'式:

screen capture of conditional formatting rules

答案 2 :(得分:10)

您可以按Shift+Space暂时突出显示当前行(不更改选择)。当前列Ctrl+Space

似乎可以在Excel,Google表格,OpenOffice Calc和Gnumeric(我尝试过的所有程序)中使用。 (感谢https://productforums.google.com/forum/#!topic/docs/gJh1rLU9IRA指出这一点)

不幸的是,不如公式和基于宏的解决方案(这对我来说是BTW)那么好,因为移动光标时突出显示会消失,但它也不需要每次设置它的麻烦时间,或用它制作模板(我无法开始工作)。

此外,我发现您可以将条件格式公式(对于Excel)从其他解决方案简化为单个规则的单个公式:

  

=OR(CELL("col")=COLUMN(),CELL("row")=ROW())

权衡这一点,如果你这样做,突出显示的列和行必须使用相同的格式,但这对于大多数情况来说可能已经足够了,并且工作量较少。 (感谢https://trumpexcel.com/highlight-active-row-column-excel/缩写公式)

答案 3 :(得分:6)

首先谢谢!我刚刚创建了一个突出显示单元格的解决方案,使用Selection_Change并更改单元格内容。我不知道它会禁用撤消。 我找到了一种方法,通过组合条件格式,Cell()和Selection_Change事件来实现。这就是我做到的。

  • 在单元格A1中,我将公式 =单元格("行")
  • 第2行完全为空
  • 第3行包含标题
  • 第4行和第4行是数据
  • 要更新A1中的公式,需要重新计算工作表。我可以使用F9执行此操作,但我创建了 Selection_Change事件,其中唯一要执行的代码是 Range("A1").Calculate 。这样,每次用户移动时都会执行此操作,并且由于Selection_Change未更改工作表中的任何值/格式等,因此不会禁用撤消。
  • 现在只需输入条件格式以突出显示与单元格A1具有相同行的单元格。
    • 选择整个列B
    • 条件格式,管理规则,新规则,使用公式确定要格式化的单元格
    • 输入以下公式: =行(B1)= $ A $ 1
    • 点击格式并选择要突出显示的方式
    • 就绪。在弹出窗口中按“确定”。

这适合我。

答案 4 :(得分:2)

Range.Calculate的替代方法是使用ActiveWindow.SmallScroll 唯一的缺点是,在做出新选择之后,屏幕会闪烁一秒钟。 手动滚动时,您需要确保新选择项完全移出屏幕(窗口),以使其起作用。这就是为什么在下面的代码中,我们需要滚动到足以使所有可见行都离开屏幕视图,然后再滚动回到相同位置-强制屏幕刷新以进行条件格式化。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ScreenUpdating = False
ActiveWindow.SmallScroll Down:=150 'change these values to total rows displayed on screen
ActiveWindow.SmallScroll Down:=-150 'change these values to total rows displayed on screen
'DoEvents 'unable to use this to remove the screen flicker
ScreenUpdating = True
End Sub

积分: 罗里·阿奇博尔德 https://www.experts-exchange.com/questions/28275889/When-is-excel-conditional-formatting-refreshed.html

答案 5 :(得分:0)

使用条件格式,而不是突出显示整个行和列,可以使用以下代码突出显示单元格左侧的行和单元格上方的列:

=OR(AND(CELL("col")=COLUMN();(CELL("row")-1)>=ROW());AND(CELL("col")>=COLUMN();(CELL("row")-1)=ROW()))

答案 6 :(得分:0)

在工作表Selection_change事件中调用以下内容:

Function highlight_Row(rngTarget As Range)
    Dim strRangeRow As String
    strRangeRow = rngTarget.Row
    strRangeRow = strRangeRow & ":" & strRangeRow
    Rows(strRangeRow).Select
    rngTarget.Activate
End Function

为清晰起见,这是长格式!

答案 7 :(得分:0)

还要在vba中添加此代码以刷新工作表(而不是F9)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = False Then
Application.Calculate
End If
End Sub