使用案例在单元格更改上运行宏

问题描述 投票:2回答:2

我确信这是一个简单的答案,但我不熟悉VBA中的案例。我要做的是创建一个监视特定单元格以进行更改的案例。

如果发生对指定范围的更改,则应运行某些宏作为对该更改的响应。否则,什么都不应该发生。这是我到目前为止:

Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case (Change)
        Case Range("A1").Address
            Call success
        Case Else
            'Do nothing
    End Select
End Sub

\\\\\\\\\\\\\\\\\\\\\\

Sub success()
' success Macro
Cells(1, 10).Value = "Success!"
End Sub

问题是似乎没有任何事情发生。请注意,这只是一个了解案例等的测试。一旦我获得了解决方案,我希望将其扩展到更复杂的东西。

我觉得它与代码的“选择案例(更改)”部分有关,但我不确定。请不要使用if / else语句回答这个问题,我真的很喜欢它的形式。谢谢!

excel vba excel-vba
2个回答
3
投票
Select Case Target.Address(0, 0)
    Case "A1": Call success
    Case "A2": Call DoSomething
    Case Else: Call OtherAction
End Select

注意Target参数:

  1. 可以是几个单元格(或整列或整列)
  2. 可以包含非连续范围(在这种情况下,您需要遍历Areas属性以获取这些范围)

2
投票

一个更简洁的例子就是这样

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Const CELL1 = "A1"
Const CELL2 = "C2"
Const CELL3 = "D3"

Dim rg As Range

On Error GoTo ExitSub

    Application.EnableEvents = False

    Set rg = Union(Range(CELL1), Range(CELL2), Range(CELL3))

    If Intersect(rg, Target) Is Nothing Then
        ' Do nothing
    Else
        Select Case Target.Address(0, 0)
        Case CELL1
            Call success(1)
        Case CELL2
            Call success(2)
        Case CELL3
            Call success(3)
        Case Else
            'Do nothing
        End Select
    End If

ExitSub:
    Application.EnableEvents = True

End Sub

Sub success(i As Long)
' success Macro
    Cells(i, 10).Value = "Success!"
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.