如何根据单元格的内容运行宏

时间:2016-09-21 01:17:16

标签: excel vba macros

我正在寻找一些协助如何根据单元格的价值触发宏的延续。

我希望的是,当单元格A1 =单元格B1时,我需要它来执行任务,否则结束脚本。

我认为这是一个简单的If... Then脚本?非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

这是可以做到的一种方式,这是假设你的所有价值已经存在并且你正在运行支票,而不是有人在现场打字,在这种情况下John会是一个很好的方式。然而,我不喜欢workheet_change的一件事是,一旦宏被执行,你就无法点击撤销。我添加了如果长度> 0,好像你有两个空单元格,它仍会触发。

Sub TestValues()

'Define variables
Dim rng As Range
Dim cell As Range

'Set variables
Set rng = Range("A1:A10")

'Begin
For Each cell In rng
    If Len(cell) > 0 Then
        If cell.Value = cell.Offset(0, 1).Value Then
            'Run macro
        End If
    End If
Next cell

End Sub

*编辑 - 我想我没有完全正确地阅读它。出于某种原因,我认为你需要经历一系列的价值观。要完全按照你要求做的事情就更像是这样了,对不起,长篇大论......

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then
    If Len(Target) > 0 Then
        If Target.Value = Target.Offset(0, 1).Value Then
            'Run macro
        End If
    End If
End If

End Sub

答案 1 :(得分:1)

我假设您的宏负责更改A1和/或B1单元格,以便它真正知道何时执行“继续检查”。

在这种情况下,您可以通过多种方式完成此操作,其中有两种方式:

  • 在宏中保留“延续”代码

    Sub main()
    
        ' your code till the statement that changes A1 and/or B1
    
        If Range("A1").Value <> Range("B1").Value Then Exit Sub '<-- if cells A1 and B1 DON'T have the same values then exit sub
    
        'here follows your code for the "Task"
    
    End Sub
    
  • 要求将任务转移到另一个Sub

    Sub main()
    
        ' your code till the statement that changes A1 and/or B1
    
        If Range("A1").Value = Range("B1").Value Then DoTask '<-- if cells A1 and B1 HAVE the same values then call 'DoTask()'
    End Sub
    
    
    Sub DoTask()
        ' here your code code for the "Task"
    End Sub
    

    在后一种情况下,您可能希望将一个(或多个)参数从“Main”宏传递到DoTask

    Sub main()
    
        ' your code till the statement that changes A1 and/or B1
    
        If Range("A1").Value = Range("B1").Value Then DoTask Range("A1").Value '<-- if cells A1 and B1 HAVE the same values then call 'DoTask  passing A1 cell value as "argument"
    End Sub
    
    
    Sub DoTask(val As Variant) '<--| DoTask accepts a parameter declared as of Variant type (but you may choose a more proper one
        ' here your code code for the "Task"
        ' it will use 'val'
    End Sub