我想要实现的是突出显示活动的行或列。我使用了VBA解决方案,但每次使用Selection_change
事件时,我都没有机会撤消工作表中的任何更改。
有没有办法以某种方式突出显示活动行/列而不使用VBA?
答案 0 :(得分:27)
您可以获得的最佳效果是使用条件格式。
创建两个基于公式的规则:
=ROW()=CELL("row")
=COLUMN()=CELL("col")
如图所示:
唯一的缺点是每次选择单元格时都需要重新计算工作表。 (您可以按" 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'式:
答案 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事件来实现。这就是我做到的。
Range("A1").Calculate
。这样,每次用户移动时都会执行此操作,并且由于Selection_Change未更改工作表中的任何值/格式等,因此不会禁用撤消。 这适合我。
答案 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