1

我有这个工作簿代码:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'toggles worksheet colors
'code will remove all color
'and color active row and column

  If ActiveCell.Interior.ColorIndex <> xlNone Then
     Cells.Interior.ColorIndex = xlNone
  Else
     Cells.Interior.ColorIndex = xlNone
     ActiveCell.EntireRow.Interior.ColorIndex = 4
End If
End Sub

并且效果很好。但如果一行有初始颜色,它将被删除。让我知道如何突出显示活动行并通过更改行来获得其初始颜色?

4

2 回答 2

1

该死的,我找不到加载项,但我为你重新创建了代码。请注意,这未经彻底测试。在我所做的任何小测试中,它都有效......

逻辑

  1. 创建一个隐藏的工作表。
  2. 将当前单元格的格式存储在该隐藏工作表的第 1 行中
  3. 将活动工作表中当前选定的行号存储到A2隐藏工作表的单元格
  4. 当您移动到另一行时,检索最后一个行号并恢复它。

代码

在这个工作簿代码区

在此处输入图像描述

Private Sub Workbook_Open()
    Dim ws As Worksheet

    '~~> Delete the Temp sheet we created i.e if we created
    Application.DisplayAlerts = False
    On Error Resume Next
    Sheets("MyHiddenSheet").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True

    '~~> ReCreate the Sheet
    Set ws = ThisWorkbook.Sheets.Add
    '~~> i am using a normal name. Chnage as applicable
    ws.Name = "MyHiddenSheet"
    '~~> Hide the sheet
    ws.Visible = xlSheetVeryHidden
End Sub

在相关的工作表代码区域。我用Sheet1作为一个例子

在此处输入图像描述

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    '~~> Don't do anything if multiple cells are selected
    If Target.Cells.CountLarge > 1 Then Exit Sub

    Dim ws As Worksheet

    '~~> Set our relevant sheet
    Set ws = ThisWorkbook.Sheets("MyHiddenSheet")

    '~~> Get the row number of the last row we had selected earlier
    '~~> For obvious reasons, this will be empty for the first use.
    If Len(Trim(ws.Cells(2, 1).Value)) <> 0 Then
        '~~> If user has moved to another row then
        '~~> Restor the old row
        If Target.Row <> Val(ws.Cells(2, 1).Value) Then
            ws.Rows(1).Copy
            Rows(ws.Cells(2, 1).Value).PasteSpecial xlFormats
        End If
    End If

    '~~> Copy the current row's format to the hidden sheet
    Rows(Target.Row).Copy
    ws.Rows(1).PasteSpecial xlFormats
    '~~> Store the current rows value in cell A2
    ws.Cells(2, 1).Value = Target.Row

    '~~> Highlight the current row in a shade of blue.
    '~~> Chnage as applicable
    With Rows(Target.Row).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent5
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
        Rows(Target.Row).Select
    End With

    '~~> Remove the `Ants` which appear after you do a copy
    Application.CutCopyMode = False
End Sub

截图

在此处输入图像描述

于 2013-09-21T09:12:19.333 回答
1

这是一种替代方法,它利用了 Excel 总是将条件格式“覆盖”在工作表上已经存在的任何格式之上的事实。

定义一个工作表级别的名称“ROWNUM”并赋值为 0。

使用公式添加条件格式=(ROW()=ROWNUM)并添加要用于行突出显示的任何格式。

您的 SelectionChange 子只是:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     Me.Names("ROWNUM").RefersToR1C1 = "=" & Target.Cells(1).Row
End Sub
于 2013-09-23T04:31:01.117 回答