VBA代码可根据列中是否存在单元格值来运行宏

时间:2018-07-20 12:03:58

标签: excel-vba

看起来有点帮助-VBA相对较新,并且努力寻找一些VBA代码来完成我想做的事情。

基本上-我在“摘要”工作表中有单元格B3,这是一个输入单元格。将数据输入该单元格后,我希望VBA代码检查工作表AAT的B列,如果有匹配项(即工作表AAT的B列中的任何值都与工作表摘要中的单元格B3匹配),那么我希望运行Macro AAT 。 如果在此工作表中找不到数据,则宏将搜索工作表AOT的B列;如果找到匹配的数据,则将运行宏AOT。 如果在工作表AOT或AAT的B列中找不到B3中的值,则会出现一个弹出框,提示未找到数据。

我认为这对您的专家来说非常容易,但是对我来说-作为一个新手,过去一个小时左右我一直在阅读几页,可惜没有运气 感谢您的帮助!欢呼,马特

2 个答案:

答案 0 :(得分:0)

首先,不要将宏命名为AAT或AOT,因为它们是有效的列名以及工作簿中工作表的名称。在某些时候会吸引您,并使您的代码混乱-我选择将它们称为“ MacroAOT”和“ MacroAAT”

   Sub ChooseMacro()
   Dim r As Range
   r = Worksheets("AAT").Columns("B").Cells.Find(Worksheets("summary").Range("b3"))
   If r Is Nothing Then
        r = Worksheets("AOT").Columns("B").Cells.Find(Worksheets("summary").Range("b3"))
        If r Is Nothing Then
             MsgBox "Not Found"
        Else
            MacroAOT
        End If
    Else
          MacroAAT
    End If
End Sub

答案 1 :(得分:0)

假设我们在标准模块中有三个宏:

Sub FAIL()
    MsgBox "error"
End Sub

Sub AAT()
    MsgBox "AAT"
End Sub

Sub AOT()
    MsgBox "AOT"
End Sub

在单元格 C3 中输入:

=IF(ISNUMBER(MATCH(B3,AAT!B:B,0)),"AAT",IF(ISNUMBER(MATCH(B3,AOT!B:B,0)),"AOT","FAIL"))

此公式告诉系统要运行哪个宏。在单元格 B3 中输入值后,运行以下命令:

Sub TestB3()
    Application.Run Range("C3").Value
End Sub

enter image description here