2015-03-31 57 views
0

我想运行一个Excel VBA代码(它所要做的就是删除同一行内的特定单元格,并且已打开相对引用,以便我可以将Excel VBA代码应用于所有行,如果存在适当的“X “)基于某个单元格中是否存在X.如何使用VBA执行基于IF语句的宏?

这里是我试过到目前为止(Excel的VBA代码就被称为“生物”):

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

我要补充一点,我在VBA部分“GetATPLabel”写这个。就像我说的那样,总是noob,但我认为我很接近,所以任何帮助表示赞赏。

+0

你不需要发布您的所有代码,但看到相关部分将会很有帮助。请参阅[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。 – Jeeped 2015-03-31 21:08:37

回答

0

听起来好像认为生物学(或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行到最后一行与任何东西。如果它发现Xx(通过在比较之前将单元格值强制为大写来消除大小写敏感性),那么它会调用第二个宏macro_Biology并告诉它要处理哪一行。

0

让我们假设生物学()是一个标准模块中的子:)

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

要调用生物学(

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

要调用这个只要你想,跑自动如果用户在单元格中键入XC22,请在工作表代码区域中插入以下事件宏:

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 

要调用生物学()自动如果一个公式给出了一个在细胞XC22,插入工作表中的代码区以下事件宏:

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