如何使用VBA基于IF语句执行宏?

时间:2015-03-31 20:56:15

标签: excel vba excel-vba if-statement

我想运行一个Excel VBA代码(它只会删除同一行中的特定单元格,并且我已打开相对引用,以便我可以将Excel VBA代码应用于所有行,如果有&#根据某个单元格中是否有X,适当的" X")。

这是我迄今为止所尝试的内容(Excel VBA代码刚刚被称为"生物学"):

If Range("C22").Value = "X" Then
   Call macro_Biology
End If

我应该补充一点,我是在VBA部分" GetATPLabel"下写的。就像我说的,总菜鸟,但我想我已经接近了,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

听起来似乎重要的是 Biology (或 macro_Biology )宏需要知道它应该在哪一行上工作。您可以使用参数将此信息传递给它。例如:

Sub start_with_this()
    Dim rw As Long, lr As Long
    With ActiveSheet
        lr = .Cells(Rows.Count, "C").End(xlUp).Row
        For rw = 2 To lr
            If UCase(.Cells(rw, "C").Value) = "X" Then
                Call macro_Biology(rw)
            End If
        Next rw
    End With
End Sub

Sub macro_Biology(r As Long)
    ' r is the row that was passed in.
    ' do something with r
End Sub

在最初启动start_with_this宏之后,它会遍历C列中从第2行到最后一行的每个单元格,其中包含任何内容。如果找到 X x (通过在比较之前将单元格值强制为大写字母来移除区分大小写),则会调用第二个宏{{1}并告诉它要处理哪一行。

答案 1 :(得分:0)

让我们假设 Biology()是标准模块中的子项:

Sub Biology()
    MsgBox "study biology!"
End Sub

要根据需要调用此方法,请运行:

Sub TestIt()
    If Range("C22").Value = "X" Then
        Call Biology
    End If
End Sub

如果用户在单元格 C22 中键入 X ,则自动调用 Biology(),在工作表代码区域中插入以下事件宏:

Private Sub Worksheet_Change(ByVal Target As Range)
    Set intrs = Intersect(Target, Range("C22"))
    If Not intrs Is Nothing Then
        If intrs.Value = "X" Then
            Application.EnableEvents = False
                Call Biology
            Application.EnableEvents = True
        End If
    End If
End Sub

如果公式在单元格 C22 中提供 X ,则自动调用 Biology(),在工作表代码区域中插入以下事件宏:

Private Sub Worksheet_Calculate()
    If Range("C22").Value = "X" Then
            Application.EnableEvents = False
                Call Biology
            Application.EnableEvents = True
    End If
End Sub