【问题标题】:Run macro when a cell within a certain range is changed当某个范围内的单元格发生变化时运行宏
【发布时间】:2016-02-06 02:07:16
【问题描述】:

我正在使用这个:

    Worksheet_Change(ByVal Target As Range)

出于多种目的从我的代码中运行一部分。现在我想做同样的事情,但只在某个范围内的值发生变化时运行它。我尝试了以下方法,但没有成功:

    Worksheet_Change(ByVal Target As Range("C5:H5"))

代码逐一检查单元格列表,每个有值的单元格将变为绿色,每个空单元格将变为红色。逐个执行此操作时,您不需要选择单元格,但是由于要着色的单元格数量众多,因此我循环这部分以防止我的代码变得非常长。

通过仅在更改特定范围内的单元格时运行代码,我的 Excel 工作表中的用户仍然能够编辑工作表的其他部分,而无需在每次输入后更改所选单元格。

    Private Sub Worksheet_Change(ByVal Target As Range)


    Sheets("MainSheet").Range("C5").Select
    Do While ActiveCell.Offset(-1, 0) <> ""
        If ActiveCell.Value = "" Then
           ActiveCell.Offset(-1, 0).Interior.Color = RGB(255, 0, 0)
                Else: ActiveCell.Offset(-1, 0).Interior.Color = RGB(0, 255, 0)
        End If
        ActiveCell.Offset(0, 1).Select
    Loop


    End Sub

【问题讨论】:

  • Sheets("MainSheet") 和活动工作表是同一个工作表吗?

标签: excel vba


【解决方案1】:

使用Target 范围。如果一次在多个单元格中更改值(例如使用 Ctrl+Enter),ActiveCell 将不会提供正确的结果。

Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C5:H5")) Is Nothing Then
    MsgBox "Change in " & Target.Address
End If

【讨论】:

  • 我把它贴在我的代码之前。它仍然运行,即使我正在编辑不在“C5:H5”范围内的单元格。当我编辑范围内的一个单元格时,我只希望代码运行。谢谢你的建议
【解决方案2】:

解决方案

在运行您要执行的操作之前,存储活动单元格

'store currently active cell
Set myActiveCell = ActiveCell
Set myActiveWorksheet = ActiveSheet
Set myActiveWorkbook = ActiveWorkbook

Sheets("MainSheet").Select
Range("C5").Select
j = 0

Do While j < 6
    If ActiveCell.Offset(0, j).Value = "" Then
        ActiveCell.Offset(-1, j).Interior.Color = RGB(255, 0, 0)
            Else: ActiveCell.Offset(-1, j).Interior.Color = RGB(0, 255, 0)
    End If
    j = j + 1
Loop

'go back to previously active cell
    myActiveWorkbook.Activate
    myActiveWorksheet.Activate
    myActiveCell.Activate

【讨论】:

  • Target.Address 在哪里? OP只希望代码在Range("C5:H5"))发生变化时激活,你能让代码在没有“选择”的情况下工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多