我有一个创建的宏列表,它们都可以自行工作,如果按顺序运行,也可以工作。为了预防,我想将我的序列变成一个单独的宏,其中包含条件语句,以防数据不存在。
这是我对条件宏的尝试,它似乎没有给我想要的结果:
Sub KPIFull()
Application.Run "RemoveFormatting"
Application.Run "WorkBookSetUp"
Application.Run "SeparateData"
If Sheets("RM Deliveries").Range("B2").Value = True Then
Application.Run "RMDeliveriesOutput"
Else: Next
If Sheets("RM TAT").Range("B2").Value = True Then
Application.Run "RMTATOutput"
Else: Next
If Sheets("FP Deliveries").Range("B2").Value = True Then
Application.Run "FPDeliveriesOutput"
Else: Next
If Sheets("FP TAT").Range("B2").Value = True Then
Application.Run "FPTAToutput"
Else: Next
End Sub
那么,为什么这对我不起作用......我使用autofilter。整个宏的目的是从数据库中获取数据,将其放入Excel中,然后运行此宏以获取完整的报告。我是如何做到这一点的,让分析师将数据库数据放入Sheet1,然后将其复制到Sheets 2& 3.表2和3自动过滤器具有明确的术语。
当我检查单元格B2中的值是否存在,并且B2可能被过滤掉时,我仍然运行代码,如果自动过滤后没有剩余行,则可能导致错误。
我想要的是采取并修改此代码以执行以下操作:
If Sheets("Sheet1").Range("B2:B").Contain="Term1, Term2, Term3" Then
Application.Run "RMDeliveriesOutput"
Else: Next
我的问题是我不知道为 contains =“term1,term2,term3”写什么,这可能实际上是正确的VBA代码。
有没有人知道将这种类型的搜索作为条件的方法?
编辑:
根据与Xiaoy312的合作尝试以下内容:
Sub KPIFull()
RemoveFormatting
WorkBookSetUp
SeparateData
Dim abc As Integer
Dim def As Integer
Sheets("RM").Select
Range("A1").Select
Selection.CurrentRegion.Select
abc = Selection.Rows.Count
If abc > 2 Then
RMDeliveriesOutput
RMTATOutput
End If
Sheets("FP").Select
Range("A1").Select
Selection.CurrentRegion.Select
def = Selection.Rows.Count
If def > 2 Then
FPDeliveriesOutput
FPTATOutput
End If
End Sub
FPDeliveriesOutput和FPTATOutput都来自FP!在完成他们的工作流程如果我可以在那个阶段终止工作流程,它可能会工作,尽管代码似乎仍在工作,尽管“如果”不满意。有什么建议吗?
EDIT2:
此代码似乎有效:
Sub KPIFull()
RemoveFormatting
WorkBookSetUp
SeparateData
RemoveHiddenRowsRM
RemoveHiddenRowsFP
Dim abc As Integer
Dim def As Integer
Sheets("RM").Select
Range("A1").Select
Selection.CurrentRegion.Select
abc = Selection.Rows.Count
Sheets("FP").Select
Range("A1").Select
Selection.CurrentRegion.Select
def = Selection.Rows.Count
If abc > 2 Then
RMDeliveriesOutput
RMTATOutput
End If
If def > 2 Then
FPDeliveriesOutput
FPTATOutput
End If
End Sub
在我删除了自动过滤页中的隐藏行后,它才有效。
答案 0 :(得分:0)
Application.Run
。
只需调用不带括号的子程序。True
测试变量。如果它等于true,因为它是真的。Next
关键字仅用于标记For
循环的结束。If (condition1) Then
'do something if condition1
ElseIf (condition2) Then 'Keep in mind that this is optional
'do something if condition2
'You can also add as many ElseIf below
Else 'This is also optional
'do something if everything above fails
End If
这是您的代码修复
Sub KPIFull()
RemoveFormatting
WorkBookSetUp
SeparateData
'Unless you want to stop after 'RM Deliveries'!B2 contains something
'Ill suggest you to replace the IF THEN....ELSEIF...THEN...END IF by
'IF THEN ... END IF
'IF THEN ... END IF
'IF THEN ... END IF
'IF THEN ... END IF
If Not IsEmpty(Sheets("RM Deliveries").Range("B2")) Then
RMDeliveriesOutput
ElseIf Not IsEmpty(Sheets("RM TAT").Range("B2")) Then
RMTATOutput
ElseIf Not IsEmpty(Sheets("FP Deliveries").Range("B2")) Then
FPDeliveriesOutput
ElseIf Not IsEmpty(Sheets("FP TAT").Range("B2")) Then
FPTAToutput
End If
End Sub
如果要测试字符串是否包含在另一个字符串中,请使用InStr
函数并测试结果是否为0. InStr
将返回您要查找的位置。
instr(1, "QWEASDZXC", "ASD") <> 0
您可以尝试此操作来测试工作表是否包含除标题行
以外的数据Sheets("FP TAT").UsedRange.SpecialCells(xlCellTypeConstants).Rows.Count > 2