使用案例

时间:2018-01-01 18:53:41

标签: excel vba excel-vba

我确信这是一个简单的答案,但我不熟悉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语句回答这个问题,我非常希望以案例的形式。谢谢!

2 个答案:

答案 0 :(得分: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属性以获取这些范围)

答案 1 :(得分: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