0

我想知道是否有人对此有任何建议。当单击单元格时,我希望该行在第 6 行下方突出显示。因此,如果我单击 A7,则第 7 行将突出显示。如果我然后单击 B9,第 7 行将删除突出显示,然后第 9 行将突出显示。我确实找到了可以满足我需要的代码并对其进行了一些定制。除了保存、关闭和重新打开 Excel 时,一切都完全按照我需要的方式工作。

如果第 9 行突出显示,并且电子表格已保存、关闭并重新打开,则第 9 行将保持突出显示(即使单击另一个单元格)。所以现在我突出显示了 2 行。为了在重新打开电子表格后解决此问题,请单击不同的行,然后单击第 9 行。然后它将返回到突出显示的 1 行。

有人对此有解决方案吗?下面是我正在使用的代码。

感谢有人可以提供的任何帮助,

克里斯

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ActiveSheet.Unprotect

Static rr

If rr <> "" Then With Rows(rr).Interior .ColorIndex = xlNone End With End If

r = Selection.Row rr = r

With Rows(r).Interior .ColorIndex = 20 .Pattern = xlSolid End With

ActiveSheet.Protect

End Sub

4

4 回答 4

1

以下代码组合似乎有效;我每次都突出显示整行。

Private lastRow As Long

Private Sub Worksheet_Activate()
    lastRow = ActiveCell.Row
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If lastRow <> 0 Then
        Rows(lastRow).EntireRow.Interior.ColorIndex = xlNone
        If Target.Row > 6 Then
            Target.Rows(1).EntireRow.Interior.ColorIndex = 20
        End If
        lastRow = Target.Row
    Else
        lastRow = Target.Row
    End If
End Sub

实际上,它可能需要一些工作。但是,这可能是您的起点。

于 2013-06-09T03:38:57.207 回答
0

您的静态 rr 变量是 Variant,不会有默认值“”。因此,当您重新打开文件时,光标将位于之前所在的行中,并且由于 rr 不等于 "" 它不会从该行中删除突出显示。(事实上​​,我不确定它目前是如何移除高光的。)

无论如何,尝试:

Static rr
If IsEmpty(rr) Then
    rr = ""
End If

或者,给 rr 提供 Integer 或 Long 的数据类型,这将假定默认值为 0。

于 2013-06-09T02:55:07.723 回答
0

我编写了自己的代码,而不是尝试使用我找到的代码。这效果要好得多。它还允许用户指定他们自己要突出显示的行范围。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.EnableEvents = False
ActiveSheet.Unprotect

Dim iFirstCol As Integer
Dim iLastCol As Integer
Dim iFirstRow As Integer
Dim iLastRow As Integer
Dim iColor As Integer

'''Only adjust the below numbers to fit your desired results.'''
iFirstCol = 1 'Change this number to the number of the first column that needs to be highlighted. Column A = 1.
iLastCol = 15 'Change this number to the number of the last column that needs to be highlighted. Column A = 1.
iFirstRow = 7 'Change this number to the number of the first row that needs to be highlighted.
iLastRow = 500 'Change this number to the number of the last row that needs to be highlighted.
iColor = 20 'Change this number to use a different highlight color.
'''End of changes, do not change anything else.'''

'The row highlight will only be applied if the selected range is within this if statement criteria.
If Target.Row > iFirstRow - 1 And Target.Row < iLastRow + 1 And Target.Column > iFirstCol - 1 And Target.Column < iLastCol + 1 Then

    'Resets the color within the full range when cell selection changed.
    ActiveSheet.Range(ActiveSheet.Cells(iFirstRow, iFirstCol), ActiveSheet.Cells(iLastRow, iLastCol)).Interior.Color = xlNone

    'Applies the colors to the row.
    For counter = iFirstCol To iLastCol
        With ActiveSheet.Cells(Target.Row, iFirstCol).Interior
            .ColorIndex = iColor
            .Pattern = xlSolid
        End With
        iFirstCol = iFirstCol + 1
    Next counter

End If

ActiveSheet.Protect
Application.EnableEvents = True

End Sub
于 2013-06-24T07:31:33.037 回答
0

我经常在选择时突出显示表格中的行。虽然我可能过度简化了事情,但看起来比您上面提供的代码要容易得多。这就是我所做的;我在工作表选择更改中只使用了一小段代码,用于应该具有有效突出显示行的范围,例如:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("D8:R10000")) Is Nothing Then
Range("B1").Value = ActiveCell.Row
End If
End Sub

然后我对 B1 和范围使用条件格式,并为所选行使用您可能喜欢的任何类型的格式。上面的条件格式公式为:=$B$1=ROW() 应用范围为:=$D$8:$R$10000

就是这样。不需要其他编码,并且可以简单地更改格式。您对此有何看法?

于 2015-01-19T05:34:34.160 回答