Excel 2010宏以突出显示活动单元格的行

时间:2012-09-18 13:17:25

标签: excel-vba vba excel

我正在尝试使用以下宏,但它甚至没有将其识别为宏,因此我无法运行宏。如果我将第一个更改为“私有/公共子测试()”它将运行,但是它表示我的目标对象未定义。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Application.ScreenUpdating = False
' Clear the color of all the cells
Cells.Interior.ColorIndex = 0
With Target
    ' Highlight the entire row and column that contain the active cell
    .EntireRow.Interior.ColorIndex = 8
    .EntireColumn.Interior.ColorIndex = 8
End With
Application.ScreenUpdating = True
End Sub

3 个答案:

答案 0 :(得分:4)

您必须将宏放在工作表本身的代码中,而不是放在单独的模块中。

你正在做的是事件编程,它必须与你想要做出的反应相匹配。

在你习惯的意义上,它不是一个宏。事件将对发生的事情作出反应,并且无法正常运行。当您选择另一个单元格时(例如,从A1到B2的更改选择),您所做的代码会对选择的单元格的更改做出反应。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
选择改变时作出反应
If Target.Cells.Count > 1 Then Exit Sub
如果选择了多个单元格,则不要运行其余代码 Application.ScreenUpdating = False
关闭屏幕,所以在我们完成之前你看不到所有的变化 ' Clear the color of all the cells
Cells.Interior.ColorIndex = 0
With Target

使用选中的单元格,
' Highlight the entire row and column that contain the active cell
.EntireRow.Interior.ColorIndex = 8
.EntireColumn.Interior.ColorIndex = 8
End With
Application.ScreenUpdating = True

现在所有的着色都已完成,将屏幕重新打开,以便看到我们工作的结果 End Sub

答案 1 :(得分:0)

在模块中试用此代码,将其称为宏:

Public Sub Highlight()
  Application.ScreenUpdating = False
  ' Clear the color of all the cells
  ActiveSheet.Cells.Interior.ColorIndex = 0
  With ActiveCell
      ' Highlight the entire row and column that contain the active cell
      .EntireRow.Interior.ColorIndex = 8
      .EntireColumn.Interior.ColorIndex = 8
  End With
  Application.ScreenUpdating = True
End Sub

你必须使用Public,因此这个子在excel的宏菜单中可用。在那里你可以“传统”使用它 - 我明白为它分配一个按钮或短按键。

答案 2 :(得分:0)

此答案基于您希望代码在用户更改所选单元格后作为EVENT运行的假设

如果您希望此代码仅在1个工作表中运行,请将其放在工作表对象中 enter image description here

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub

    Application.ScreenUpdating = False
    ' Clear the color of all the cells
    Target.Parent.Cells.Interior.ColorIndex = 0
    With Target
        ' Highlight the entire row and column that contain the active cell
        .EntireRow.Interior.ColorIndex = 8
        .EntireColumn.Interior.ColorIndex = 8
    End With
    Application.ScreenUpdating = True
End Sub

如果您希望在所有工作表中运行此项,请将其放在THISWORKBOOK OBJECT中(如果您想省略/包含可以在sh上过滤的工作表)

enter image description here

选项明确

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    If Target.Cells.Count > 1 Then Exit Sub

    Application.ScreenUpdating = False
    ' Clear the color of all the cells
    Sh.Cells.Interior.ColorIndex = 0
    With Target
        ' Highlight the entire row and column that contain the active cell
        .EntireRow.Interior.ColorIndex = 8
        .EntireColumn.Interior.ColorIndex = 8
    End With
    Application.ScreenUpdating = True

End Sub