在Excel中使用Hightlight活动行/列而不使用VBA?

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

有没有办法以某种方式高亮活动行/列而不使用VBA?

我不认为不使用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 

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

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

最后,使用条件格式来突出基于“HighlightSelection”公式的单元格:

屏幕捕获条件格式规则

你可以得到最好的是使用条件格式。

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

  1. =ROW()=CELL("row")
  2. =COLUMN()=CELL("col")

如下所示:

在这里输入图像描述

唯一的缺点是,每次你select一个单元格,你都需要重新计算你的工作表。 (你可以按“F9”)

首先谢谢! 我刚刚创build了一个突出显示单元格的解决scheme,使用Selection_Change和更改单元格内容。 我不知道这将禁用撤消。 我find了一种方法,通过使用组合条件格式,Cell()和Selection_Change事件。 我就是这么做的

  • 在单元格A1中,我把公式= Cell(“row”)
  • 第2行是完全空的
  • 第3行包含标题
  • 第4行和第4行是数据
  • 为了使A1中的公式更新,工作表需要重新计算。 我可以用F9做到这一点,但是我创build了Selection_Change事件 ,唯一要执行的代码是Range("A1").Calculate 。 这样,每当用户四处移动时就完成了,由于Selection_Change不改变工作表中的任何值/格式等,所以Undo不会被禁用。
  • 现在只需input条件格式来突出显示与单元格A1具有相同行的单元格。
    • select整个B列
    • 条件格式,pipe理规则,新规则,使用公式来确定要格式化的单元格
    • input这个公式: =行(B1)= $ A $ 1
    • 点击“格式”,然后select要如何突出显示
    • 准备。 在popup窗口中按OK。

这对我有用。

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

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

不幸的是,这并不像公式和基于macros的解决scheme那样好(因为这个解决scheme对我来说很顺利),因为突出显示在移动光标时会消失,但是也不需要每次设置它的麻烦,模板(我无法工作)。

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

=OR(CELL(“col”)=COLUMN(),CELL(“row”)=ROW())

换句话说,如果你这样做,突出显示的列和行将不得不使用相同的格式,但这可能绰绰有余,对于大多数情况下,是较less的工作。 (感谢https://trumpexcel.com/highlight-active-row-column-excel/的缩写公式)

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

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