1

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

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
4

3 回答 3

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

于 2012-09-18T13:31:23.633 回答
0

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

如果您希望此代码仅在 1 个工作表中运行,请将其放在 WORKSHEET OBJECT 在此处输入图像描述

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 上进行过滤)

在此处输入图像描述

选项显式

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
于 2012-09-18T18:50:26.087 回答
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 宏菜单中可用。在那里你可以“传统地”使用它——据我所知,为它分配一个按钮或快捷键。

于 2012-09-18T14:17:46.703 回答