我想运行一个Excel VBA代码(它只会删除同一行中的特定单元格,并且我已打开相对引用,以便我可以将Excel VBA代码应用于所有行,如果有&#根据某个单元格中是否有X,适当的" X")。
这是我迄今为止所尝试的内容(Excel VBA代码刚刚被称为"生物学"):
If Range("C22").Value = "X" Then
Call macro_Biology
End If
我应该补充一点,我是在VBA部分" GetATPLabel"下写的。就像我说的,总菜鸟,但我想我已经接近了,所以任何帮助都会受到赞赏。
答案 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