Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用案例对单元格更改运行宏_Vba_Excel - Fatal编程技术网

Vba 使用案例对单元格更改运行宏

Vba 使用案例对单元格更改运行宏,vba,excel,Vba,Excel,我相信这是一个简单的答案,但我不熟悉VBA中的案例。我想做的是创建一个监控特定单元格变化的案例 如果指定范围发生更改,则应运行某些宏作为对该更改的响应。否则,什么也不应该发生。以下是我到目前为止的情况: Private Sub Worksheet_Change(ByVal Target As Range) Select Case (Change) Case Range("A1").Address Call success Case

我相信这是一个简单的答案,但我不熟悉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语句来回答这个问题,我真的希望它以案例的形式出现。谢谢

Select Case Target.Address(0, 0)
    Case "A1": Call success
    Case "A2": Call DoSomething
    Case Else: Call OtherAction
End Select
注意
目标
参数:

  • 可以是多个单元格(或整列或整行)
  • 可以包含非连续范围(在这种情况下,您需要遍历Areas属性才能获得这些范围)

  • 一个简洁的例子是这样的

    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
    

    尝试选择案例目标。地址。。。案例“$A$1”测试特定单元格位置。变量
    Change
    中有什么内容?在我之前的评论中,我假设您希望测试
    Target
    的地址,但可能不是。应该注意的是,Target可能更像是一个单元格。非常简洁,正是我想要的。谢谢@Jeeped添加了解释还应注意,如果宏success、DoSomething或其他操作中的一个更改A1或A1,事件将再次激发A2@Storax还有什么需要注意的?也许,我忘了包括错误处理程序和关闭DisplayAlerts、EnableEvents、ScreenUpdate、将计算设置为手动?您添加了。您忘记从工作表中删除所选内容。\u SelectionChange。